计蒜客 菜鸟物流的运输网络
来源:互联网 发布:网络舆情分析报告模板 编辑:程序博客网 时间:2024/05/01 02:45
输出任意一个a->mid->b不经过重复点的方案。
联想到 SPOJ 962 Intergalactic Map。
最大流
#include<set>#include<cmath>#include<queue>#include<stack>#include<cstdio>#include<bitset>#include<cassert>#include<cstring>#include<complex>#include<iostream>#include<algorithm>#define pi acos(-1)#define inf (1<<30)#define INF (1<<62)#define y1 bflaisfnmasf#define y2 fsafgmalg#define tm afnsjkf#define j1 sfakf#define j2 fasndfkas#define CLR(x,f) memset(x,f,sizeof(x))#define CPY(x,y) memcpy(x,y,sizeof(x))#define prt(x) cout<<#x<<":"<<x<<" "#define prtn(x) cout<<#x<<":"<<x<<endl#define huh(x) printf("--------case(%d)--------\n",x)#define travel(x) for(Edge *e=h[x];e;e=e->n)#define oo 1000000000#define TL#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;typedef long long ll;const int M=305;struct Edge { int to, cap, next;} edge[M*M];int head[M], dist[M], mark[M], work[M],Q[M];int n,m;int src,dest,tot;void add(int a, int b, int c) { edge[tot].to = b, edge[tot].cap = c, edge[tot].next = head[a], head[a] = tot++; edge[tot].to = a, edge[tot].cap = 0, edge[tot].next = head[b], head[b] = tot++;}bool BFS() { int i, y, k,L, H; for (i = 0; i <= dest; i++)dist[i] = -1; dist[src] = 0; L=H=0; Q[H++]=src; while(L<H){ k=Q[L++]; for(i=head[k];i!=-1;i=edge[i].next){ y=edge[i].to; if(edge[i].cap>0&&dist[y]==-1) { dist[y]=dist[k]+1; Q[H++]=y; } } } return (dist[dest] >= 0);}int frm[M];int DFS(int x, int flow) { mark[x] = 1; if (x == dest)return flow; for (int y, temp, &i = work[x]; i != -1; i = edge[i].next) { y = edge[i].to; if (edge[i].cap > 0 && dist[y] == dist[x] + 1 && !mark[y]) { if ((temp = DFS(y, min(edge[i].cap, flow))) > 0) { if(!(i&1)&&(y>>1)!=(x>>1))frm[y>>1]=x>>1;//之前忘记!(i&1)了 edge[i].cap -= temp; edge[i^1].cap += temp; return temp; } } } return 0;}int Dinic_flow(){ int i,ans=0,flow; while(BFS()){ for(i=0;i<=dest;i++)work[i]=head[i]; while(1){ for(i=0;i<=dest; i++)mark[i]=0; flow=DFS(src,oo); if(flow==0)break; ans+=flow; } } return ans;}int a[M],b[M],a0,b0;int st,en,mid;void query(int x){ a[a0++]=x; if(frm[x]!=mid)query(frm[x]);}void solve(){ CLR(head,-1); CLR(frm,0); tot=0; scanf("%d%d",&n,&m); scanf("%d%d%d",&st,&en,&mid); dest=n+1<<1|1; src=n+1<<1; add(src,mid<<1|1,2); add(st<<1|1,dest,1); add(en<<1|1,dest,1); for(int i=1;i<=n;i++) if(i!=mid)add(i<<1,i<<1|1,1); for(int u,v,i=1;i<=m;i++){ scanf("%d%d",&u,&v); add(u<<1|1,v<<1,1); add(v<<1|1,u<<1,1); }// huh(Dinic_flow()); if(Dinic_flow()==2); a0=0;query(st); b0=a0;for(int i=0;i<a0;i++)b[i]=a[i]; b[b0++]=mid; a0=0;query(en); for(int i=a0-1;i>=0;i--)b[b0++]=a[i]; for(int i=0;i+1<b0;i++){ printf("%d ",b[i]); }printf("%d\n",b[b0-1]);}int main(){ int cas;scanf("%d",&cas); while(cas--)solve(); return 0;}
0 0
- 计蒜客 菜鸟物流的运输网络
- 计蒜客 菜鸟物流的运输网络
- 计蒜客 菜鸟物流的运输网络 解题报告
- 计蒜之道复赛F题 菜鸟物流的运输网络(网络流)
- [网络流] 2016 计蒜之道 复赛 菜鸟物流的运输网络
- 计蒜之道 2016 复赛 F.菜鸟物流的运输网络
- 2016计蒜之道复赛 菜鸟物流的运输网络
- 2016 计蒜之道 复赛 菜鸟物流的运输网络【拆点+思维建图+网络流】
- 物流运输
- 【SPFA+DP】物流运输
- 【ZJOI2006】物流运输trans
- 【ZJOI2006】物流运输
- 【BZOJ1003】物流运输trans
- [ZJOI2006]物流运输trans
- [bzoj1003]物流运输trans
- BZOJ_1003 物流运输
- bzoj1003 物流运输trans
- Codevs P1655 物流运输
- C++ 虚函数在基类与派生类对象间的表现及其分析
- EasyUI学习总结(二)——EasyUI布局
- ubuntu 出现signature canot be verified 错误
- TCP/IP详解学习笔记(2)-数据链路层
- ActiveMQ - Exclusive Consumer 独占消费
- 计蒜客 菜鸟物流的运输网络
- TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议
- mongoVUE 出现“Unable to connect to server 127.0.0.1:27017: 由于目标计算机积极拒绝,无法连接。 127.0.0.1:27017.”
- js设计模式至观察者模式--不同模块间解耦
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
- HBase学习笔记(一)
- 图片与文字水平对齐
- TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节
- java-并发-Callable、Future和FutureTask