前言

赛时得分情况:

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. How to get the return value of the setTimeout inner function in js All In One

    How to get the return value of the setTimeout inner function in js All In One 在 js 中如何获取 setTimeout ...

  2. 小程序返回上一级页面背景音乐报错 setBackgroundAudioState:fail title is nil!;

    小程序初始化在onLoad的时候加载了一次背景音乐. 如果此时报错是title必传.如果没有 会报错一次 setBackgroundAudioState:fail title is nil!; 这个都 ...

  3. F118校准(一)-- 安装CA310驱动程序及SDK

    1. 准备工作 下载Ca310_drv.zip文件并解压,备用. http://www.xk-image.com/download/blog/0001_F118校准/Ca310_drv.zip 准备好 ...

  4. 各种优化器对比--BGD/SGD/MBGD/MSGD/NAG/Adagrad/Adam

    指数加权平均 (exponentially weighted averges) 先说一下指数加权平均, 公式如下: \[v_{t}=\beta v_{t-1}+(1-\beta) \theta_{t} ...

  5. 使用@Transactional注解的方法所在的类获取不到注解的解决方案

    前段时间遇到一个问题,一个service叫做A吧,有多个实现类分别是B,C,D,需要根据前端传的不同参数去匹配不同的实现类,我就自定义了一个注解@OrderDeal放在B,C,D上面,然后匹配前端传的 ...

  6. KMP算法,匹配字符串模板(返回下标)

    //KMP算法,匹配字符串模板 void getNext(int[] next, String t) { int n = next.length; for (int i = 1, j = 0; i & ...

  7. 【题解】CF631B Print Check

    题面传送门 解决思路: 首先考虑到,一个点最终的情况只有三种可能:不被染色,被行染色,被列染色. 若一个点同时被行.列染色多次,显示出的是最后一次被染色的结果.所以我们可以使用结构体,对每一行.每一列 ...

  8. 嵌入式-C语言基础:实现字符串拷贝函数

    自己实现一个字符串的拷贝函数 #include<stdio.h> #include<stdlib.h> #include <string.h> char * mys ...

  9. 微信小程序的学习(二)

    一.数据绑定 1.数据绑定的基本原则 在 data 中定义数据 在 wxml 中使用数据 2.如何在 data 里面定义数据? 在页面对应的 .js 文件中,把数据定义到 data 对象中即可: 3. ...

  10. Go语言核心36讲50

    作为拾遗的部分,今天我们来讲讲与Go程序性能分析有关的基础知识. Go语言为程序开发者们提供了丰富的性能分析API,和非常好用的标准工具.这些API主要存在于: runtime/pprof: net/ ...