网络流24题 魔术球问题
题目传送门 又是一个神奇的建图题,建图 \(Van\) ♂全不会啊 大体就是我们一个一个的把球放进来,每放进来一个,我们就求出当前的最小路径覆盖数(当前顶点数-最大流),直到最小路径覆盖数 \({>}\) 柱子数。此时的球的编号 \(-1\) 就是第一问的答案。第二问就是求每一条路径,顺着推下来就好了 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<cmath> using namespace std; struct zzz{ int t,len,nex; }e[100010<<1]; int head[20010],tot=1; void add(int x,int y,int z){ e[++tot].t=y; e[tot].len=z; e[tot].nex=head[x]; head[x]=tot; } int s=0,t=20000,vis[20010],pre[20010]; bool bfs(){ memset(vis,0,sizeof(vis)); queue <int> q; q.push(s); vis[s]=1; while(!q.empty()){ int k=q.front(); q.pop(); for