SCU 4526 最短路
来源:互联网 发布:淘宝金牌店铺可信吗 编辑:程序博客网 时间:2024/05/21 06:27
最短路
给定一个个节点,条有向边的图,再给你起点和终点,请问其中有多少条互不重叠的从起点到终点的最短路,即互相没有公共边的最短路个数(可以有公共点),用过边的不能再用。
输入第一行有一个,表示样例个数。
每个样例第一行有两个整数
然后是行,代表每一条边的起点终点和权值。
然后是一个两个整数,代表起点和终点。
输出最短路个数。
4
4 4
1 2 1
1 3 1
2 4 1
3 4 1
1 4
7 8
1 2 1
1 3 1
2 4 1
3 4 1
4 5 1
4 6 1
5 7 1
6 7 1
1 7
6 7
1 2 1
2 3 1
1 3 3
3 4 1
3 5 1
4 6 1
5 6 1
1 6
2 2
1 2 1
1 2 2
1 2
2
2
1
1显然,网络流,和上篇一样,先跑最短路,这里用dijkstra跑,然后反向网络流
吐血的是,dijkstra里面pai<,>第一个元素应该是距离,,脑残写成了点的编号,,结果wa了7次,,
#include<iostream>#include<cstdio>#include<math.h>#include<algorithm>#include<map>#include<set>#include<stack>#include<queue>#include<string.h>#include<cstring>#include<vector>using namespace std;#define INF 0x3f3f3f3f#define INFLL 0x3f3f3f3f3f3f3f3f#define FIN freopen("input.txt","r",stdin)#define mem(x,y) memset(x,y,sizeof(x))typedef unsigned long long ULL;typedef long long LL;#define MX 1111#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1typedef pair<pair<int,int>,int> PIII;typedef pair<int,int> PII;int n,m,head[MX],rear,s,t;int vis[MX],path[MX],d[MX];int arr[MX];struct Edge { int from,to,flow,nxt,dist;} edge[222222];void edge_init() { rear=0; mem(head,-1);}void edge_add(int a,int b,int dist,int c) { edge[rear].from=a; edge[rear].dist=dist; edge[rear].to=b; edge[rear].flow=c; edge[rear].nxt=head[a]; head[a]=rear++;}void dijkstra(int s) { mem(vis,0); priority_queue<PII,vector<PII>,greater<PII> > my; mem(arr,0x3f); arr[s] = 0; my.push(PII(0,s)); while(!my.empty()) { PII u = my.top(); my.pop(); if(vis[u.second]) continue; vis[u.second]=1; for(int i = head[u.second]; ~i; i = edge[i].nxt) { int v = edge[i].to; if(arr[v]<=arr[u.second]+edge[i].dist||edge[i].flow) continue; arr[v]=arr[u.second]+edge[i].dist; my.push(PII(arr[v],v)); } }}int EK(int s,int t) { int ans=0; while(1) { mem(vis,0); d[s]=INF; queue<int> my; my.push(s); vis[s]=1; int flag=0; while(!my.empty()) { int u=my.front(); my.pop(); if(u==t) { flag=1; break; } for(int i=head[u]; ~i; i=edge[i].nxt) { int v=edge[i].to; if(edge[i].flow==0||vis[v]||arr[u]!=arr[v]+edge[i].dist) continue; path[v]=i; d[v]=min(edge[i].flow,d[u]); my.push(v); vis[v]=1; } } if(flag) { ans+=d[t]; for(int i=t; i!=s; i=edge[path[i]].from) { edge[path[i]].flow-=d[t]; edge[path[i]^1].flow+=d[t]; } } else break; } return ans;}int main() { FIN; int _; scanf("%d",&_);// while(_--) { scanf("%d%d",&n,&m); edge_init(); for(int i=1; i<=m; i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); edge_add(a,b,c,0); edge_add(b,a,c,1); } scanf("%d%d",&s,&t); dijkstra(s); printf("%d\n",EK(t,s)); } return 0;}
0 0
- SCU 4526 最短路
- SCU 4526 最短路(dijkstra+枚举+BFS)
- SCU-4444 Travel(变形最短路)
- 变形最短路 SCU 4444 training 3
- SCU OJ_4444_ Travel_最短路(大数据)
- scu 4444 Travel 补图的最短路
- SCU 4444 Travel 完全图的最短路求法
- HDU-5876 & SCU-4444 (完全图的最短路)
- SCU 4444 Travel (完全图 最短路 set )
- SCU
- SCU
- SCU
- SCU
- 【SCU
- SCU
- SCU
- SCU
- (SCU
- hdu1394(最小逆序数)(线段树单点更新)
- 设置属性字体
- Acitivity和View组件介绍
- 5.14
- 简单描述JSON跟JSONP的区别以及实战
- SCU 4526 最短路
- c50
- Android面试题(一)
- 生产环境的开源容器管理平台--Rancher入门教程(3): Certified Catalog
- SeqList
- itsCoder WeeklyBlog NO.3
- 微信小程序发布引起轰动
- HTML5学习_day03(4)--html盒模型了解
- MySQL查看表基本信息