前言

赛时得分情况:

A B C D E F G H I \(\texttt{Total}\) \(\texttt{Rank}\)
\(100\) \(100\) \(10\) \(58\) \(54\) \(100\) \(300\) \(100\) \(0\) \(822\) \(2\)

考试总结完善情况:

A B C D E F G H I \(\texttt{All}\)

A. P1993 小 K 的农场

题面

给出 \(n\) 个变量 \(A_1,A_2,\cdots,A_n\)。有 \(m\) 个约束条件,约束条件分三种:

  • 1 x y c:\(A_x-A_y\geq c\)。
  • 2 x y c:\(A_x-A_y\leq c\)。
  • 3 x y:\(A_x=A_y\)。

你需要输出是否存在满足条件的自然数解。如果存在输出 \(\texttt{Yes}\) 否则输出 \(\texttt{No}\)。

\(1 \leq n,m,c \leq 5 \times 10^3\)

题解

差分约束模板题。

  • 对于第一种,\(A_x-A_y\geq c\) 可以变形成 \(A_y-A_x\leq -c\)。连边 \((x,y,-c)\)。
  • 对于第二种,连边 \((y,x,c)\)。
  • 对于第三种,可以看成 \(A_x-A_y\leq0\) 且 \(A_y-A_x\leq0\),连边 \((x,y,0)\) 和 \((y,x,0)\)。

最后建立超级源点 \(O\),对于所有变量 \(i\) 连边 \((O,i,0)\)。跑 SPFA 判负环,如果有负环就无解,否则有解。

时间复杂度 \(O(nm)\)。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std; const int N = 1e5; int n,m; struct edge{
int nxt,to,w;
} g[N<<1];
int head[N],ec;
void add(int u,int v,int w){
g[++ec].nxt=head[u];
g[ec].to=v;
g[ec].w=w;
head[u]=ec;
} int vis[N],dis[N],cq[N]; bool spfa(int s){
queue<int> q;
q.push(s);
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
cq[s]=1;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=g[i].nxt){
int v=g[i].to;
if(dis[u]+g[i].w<dis[v]){
dis[v]=dis[u]+g[i].w;
if(!vis[v]){
vis[v]=1;
cq[v]++;
if(cq[v]>=(n+1)) return false;
q.push(v);
}
}
}
}
return true;
} signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int op,a,b,c;
cin>>op>>a>>b;
if(op==1){
cin>>c;
add(a,b,-c);
}
else if(op==2){
cin>>c;
add(b,a,c);
}
else{
add(a,b,0);
add(b,a,0);
}
}
for(int i=1;i<=n;i++){
add(0,i,0);
}
cout<<(spfa(0)?"Yes":"No");
return 0;
}

B. P2294 [HNOI2005]狡猾的商人

题面

有 \(n\) 个变量 \(A_1,A_2,\cdots,A_n\) 和 \(m\) 个约束条件,每个约束条件形如 \(\{s,t,v\}\),意思是 \(\sum_{i=s}^{t}=v\)。求是否存在自然数解。

\(w\) 组数据。

\(1 \leq w \lt 100,1 \leq n \lt 100,\leq m \lt 1000\)

题解

令 \(b\) 为 \(a\) 的前缀和,则对于约束 \(\{s,t,v\}\),可以看成 \(b_t-b_{s-1}=v\),可以化成 \(b_t-b_{s-1}\leq v,b_{s-1}-b_t\leq (-v)\) 差分约束,连边 \((s-1,t,v),(t,s-1,-v)\),最后跑 SPFA 判负环即可。

时间复杂度 \(O(wnm)\)。

代码

#include <bits/stdc++.h>
#define CL(x) memset(x,0,sizeof(x))
using namespace std; const int N = 1e5; int n,m; struct edge{
int nxt,to,w;
} g[N<<1];
int head[N],ec;
void add(int u,int v,int w){
g[++ec].nxt=head[u];
g[ec].to=v;
g[ec].w=w;
head[u]=ec;
} int vis[N],dis[N],cq[N]; bool spfa(int s){
queue<int> q;
q.push(s);
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
cq[s]=1;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=g[i].nxt){
int v=g[i].to;
if(dis[u]+g[i].w<dis[v]){
dis[v]=dis[u]+g[i].w;
if(!vis[v]){
vis[v]=1;
cq[v]++;
if(cq[v]>=(n+1)) return false;
q.push(v);
}
}
}
}
return true;
} signed main(){
int t;cin>>t;
while(t--){
cin>>n>>m;
CL(g);CL(head);ec=0;CL(vis);CL(cq);CL(dis);
while(m--){
int u,v,w;
cin>>u>>v>>w;
add(u-1,v,-w);
add(v,u-1,w);
}
for(int i=1;i<=n;i++){
add((n+1),i,0);
}
if(!spfa(n+1)) cout<<"false";
else cout<<"true";
cout<<'\n';
}
return 0;
}

C. P7624 [AHOI2021初中组] 地铁

题面

题解

代码

D. P6378 [PA2010] Riddle

题面

题解

代码

E. P3513 [POI2011] KON-Conspiracy

题面

题解

代码

F. P5905 【模板】Johnson 全源最短路

题面

给出一个 \(n\) 个点 \(m\) 条边的有向图,令 \(d(i,j)\) 为 \(i\to j\) 的最短路径边权和。对于每一个 \(i(1 \leq i \leq n)\),输出 \(\sum_{j=1}^{n}{j\cdot d(i,j)}\)。

\(1 \leq n \leq 3\times10^3,1 \leq m \leq 6\times10^3\)

题解

模板题,不讲。

时间复杂度 \(O(nm+nm\log m)\)。

代码

G. P8207 [THUPC2022 初赛] 最小公倍树

题面

题解

代码

H. P6192 【模板】最小斯坦纳树

题面

题解

代码

I. P4294 [WC2008]游览计划

题面

题解

代码

test20230111考试总结 -2023寒图论专题的更多相关文章

  1. 正睿OI国庆DAY2:图论专题

    正睿OI国庆DAY2:图论专题 dfs/例题 判断无向图之间是否存在至少三条点不相交的简单路径 一个想法是最大流(后来说可以做,但是是多项式时间做法 旁边GavinZheng神仙在谈最小生成树 陈主力 ...

  2. 图论专题1考试Problem1

    Problem 1. bricksInput file: bricks.inOutput file: bricks.outTime limit: 1 secondjyb 在BUAA 天天被大神虐,所以 ...

  3. 2014 UESTC暑前集训图论专题解题报告

    A.方老师和缘分 http://www.cnblogs.com/whatbeg/p/3765621.html B.方老师和农场 http://www.cnblogs.com/whatbeg/p/376 ...

  4. 图论专题训练1-D(K步最短路,矩阵连乘)

    题目链接 /* *题目大意: *求出从i到j,刚好经过k条边的最短路; * *矩阵乘法的应用之一(国家队论文): *矩阵乘法不满足交换律,矩阵乘法满足结合律; *给定一个有向图,问从A点恰好走k步(允 ...

  5. UVa753/POJ1087_A Plug for UNIX(网络流最大流)(小白书图论专题)

    解题报告 题意: n个插头m个设备k种转换器.求有多少设备无法插入. 思路: 定义源点和汇点,源点和设备相连,容量为1. 汇点和插头相连,容量也为1. 插头和设备相连,容量也为1. 可转换插头相连,容 ...

  6. UVa10099_The Tourist Guide(最短路/floyd)(小白书图论专题)

    解题报告 题意: 有一个旅游团如今去出游玩,如今有n个城市,m条路.因为每一条路上面规定了最多可以通过的人数,如今想问这个旅游团人数已知的情况下最少须要运送几趟 思路: 求出发点到终点全部路其中最小值 ...

  7. UVa567_Risk(最短路)(小白书图论专题)

    解题报告 option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=508"& ...

  8. 并不对劲的图论专题(三):SPFA算法的优化

    1.bzoj1489-> 这是个新套路. 我们希望找到最小的x,那么可以二分x,然后判断是否存在圈的边权的平均值小于等于x. 设圈的边权依次为w1,w2,w3,…,wk,平均值为p, 则有p= ...

  9. UVa10048_Audiophobia(最短路/floyd)(小白书图论专题)

    解题报告 题意: 求全部路中最大分贝最小的路. 思路: 类似floyd算法的思想.u->v能够有另外一点k.通过u->k->v来走,拿u->k和k->v的最大值和u-&g ...

  10. UVa563_Crimewave(网络流/最大流)(小白书图论专题)

    解题报告 思路: 要求抢劫银行的伙伴(想了N多名词来形容,强盗,贼匪,小偷,sad.都认为不合适)不在同一个路口相碰面,能够把点拆成两个点,一个入点.一个出点. 再设计源点s连向银行位置.再矩阵外围套 ...

随机推荐

  1. react.js+easyui 做一个简单的商品表

    效果图:     import React from 'react'; import { Form, FormField, Layout,DataList,LayoutPanel,Panel, Lab ...

  2. 第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号

    文章目录 1.注册微信小程序账号 1.1 小程序的注册流程 1.2 登录小程序账号 2.下载微信小程序开发者平台 3.新建一个小程序 3.1 点击加号 3.2 填写项目目录和小程序ID 3.3 点击确 ...

  3. 网页头部的声明应该是用 lang="zh" 还是 lang="zh-CN"?

    网页头部的声明应该是用 lang="zh" 还是 lang="zh-CN"? 遇到问题 不知道大家有没有留意到一个问题,就是使用 VsCode 新建的 html ...

  4. Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)

    一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...

  5. 人生苦短,我用 python 之入门篇

    Python 是一种跨平台的,开源的,免费的,解释型的高级编程语言,它具有丰富和强大的库,其应用领域也非常广泛,在 web 编程/图形处理/黑客编程/大数据处理/网络爬虫和科学计算等领域都能找到其身影 ...

  6. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)-L Bit Sequence

    题意 给你两个数l,m,大小为m的数组a,求[0,l]之间满足以下条件的数x的个数: 对于任何i输入[0,m-1],f(x+i)%2=a[i]:f(k):代表k在二进制下1的个数 m的范围<=1 ...

  7. 修改input标签里面的提示文字(placeholder)的样式

    使用 ::-webkit-input-placeholder 伪类 input::-webkit-input-placeholder{ // 修改字体大小 font-size:12px; // 修改文 ...

  8. 国产图形化的msf——Viper初体验

    目录 免责声明: Viper简介 安装 使用 免责声明: 本文章仅供学习和研究使用,严禁使用该文章内容对互联网其他应用进行非法操作,若将其用于非法目的,所造成的后果由您自行承担,产生的一切风险与本文作 ...

  9. Pthread 并发编程(三)——深入理解线程取消机制

    Pthread 并发编程(三)--深入理解线程取消机制 基本介绍 线程取消机制是 pthread 给我们提供的一种用于取消线程执行的一种机制,这种机制是在线程内部实现的,仅仅能够在共享内存的多线程程序 ...

  10. xshell调整字体大小

    1. 进入设置 %default%:默认对全部终端生效 如果想对单一终端单独设置,可先进入会话管理,针对单一会话单独调整 2. 点击外观配置,修改字体大小