最全的提交网站入口大全网站关键词 公司
web/
2025/10/2 7:55:27/
文章来源:
最全的提交网站入口大全,网站关键词 公司,微信小程序电商平台开发,创意设计包装zoj2760:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode2760 题意#xff1a;给你一张有向带权图#xff0c;然后问你最短路径有多少条。 题解#xff1a;这一题用到了网络流#xff0c;一开始#xff0c;我想到用找到一条最短路#xff0c;然后删除这条…zoj2760:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode2760 题意给你一张有向带权图然后问你最短路径有多少条。 题解这一题用到了网络流一开始我想到用找到一条最短路然后删除这条然后继续找发现这样是不对。然后看了别人的题解发现用网络流搞。就是把所有的最短路径的边对应的点之间建边边的容量是1然后跑网络流。 1 #includeiostream2 #includecstring3 #includealgorithm4 #includecstdio5 #includequeue6 #define INF 1000000007 using namespace std;8 const int N205;9 const int M30000;10 int mp[N][N],dist[N][N];11 struct Node{12 int v;13 int f;14 int next;15 }edge[M];16 int n,m,u,v,s,t,cnt,sx,ex;17 int head[N],pre[N];18 void init(){19 cnt0;20 memset(head,-1,sizeof(head));21 }22 void add(int u,int v,int w){23 edge[cnt].vv;24 edge[cnt].fw;25 edge[cnt].nexthead[u];26 head[u]cnt;27 edge[cnt].f0;28 edge[cnt].vu;29 edge[cnt].nexthead[v];30 head[v]cnt;31 }32 bool BFS(){33 memset(pre,0,sizeof(pre));34 pre[sx]1;35 queueintQ;36 Q.push(sx);37 while(!Q.empty()){38 int dQ.front();39 Q.pop();40 for(int ihead[d];i!-1;iedge[i].next ){41 if(edge[i].f!pre[edge[i].v]){42 pre[edge[i].v]pre[d]1;43 Q.push(edge[i].v);44 }45 }46 }47 return pre[ex]0;48 }49 int dinic(int flow,int ps){50 int fflow;51 if(psex)return f;52 for(int ihead[ps];i!-1;iedge[i].next){53 if(edge[i].fpre[edge[i].v]pre[ps]1){54 int aedge[i].f;55 int tdinic(min(a,flow),edge[i].v);56 edge[i].f-t;57 edge[i^1].ft;58 flow-t;59 if(flow0)break;60 }61 62 }63 if(f-flow0)pre[ps]-1;64 return f-flow;65 }66 int solve(){67 int sum0;68 while(BFS())69 sumdinic(INF,sx);70 return sum;71 }72 int temp;73 int main() {74 while(~scanf(%d,n)){75 init();76 for(int i1;in;i){77 for(int j1;jn;j){78 scanf(%d,temp);79 if(ij)mp[i][j]0;80 else if(temp-1)mp[i][j]INF;81 else82 mp[i][j]temp;83 dist[i][j]mp[i][j];84 }85 }86 scanf(%d%d,s,t);87 if(s!t){88 s;t;89 for(int k1;kn;k)90 for(int i1;in;i)91 for(int j1;jn;j){92 dist[i][j]min(dist[i][j],dist[i][k]dist[k][j]);93 }94 for(int i1;in;i){95 for(int j1;jn;j){96 if(mp[i][j]INFdist[s][i]mp[i][j]dist[j][t]dist[s][t])97 add(i,j,1);98 }99 }
100 sxs;ext;
101 printf(%d\n,solve());
102 }
103 else
104 printf(inf\n);
105 }
106 return 0;
107 } View Code 转载于:https://www.cnblogs.com/chujian123/p/3948549.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85507.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!