poj 1511 -- Invitation Cards
2013-11-18 14:03
204 查看
/* n个顶点,m条有向边 求出源点1到其他顶点的最短距离跟其他顶点到源点的最短距离之和 数据量比较到。用的邻接表存储的spfa 还有一点要注意的是dis[] 跟 ans要用__int64, 都是数据量大的原因。 这里用的是stack的spfa */ #include<iostream> #include<stdio.h> #include<stack> #include<string.h> using namespace std; const int N = 1000010; const int inf = 0x3f3f3f3f; int head ; int outstack ; bool vis ; __int64 dis ; int n,m,num_edge; typedef struct { int end,w,nxt; } Edge; Edge edge ; typedef struct { int start,end,w; } Node; Node data ; void addedge(int start,int end,int w) { edge[num_edge].end = end; edge[num_edge].w = w; edge[num_edge].nxt = head[start]; head[start]= num_edge++; } bool spfa(int start) { for(int i = 1 ; i <= n ; i++) { dis[i] = inf; outstack[i] = 0; vis[i] = false; } stack<int>s; s.push(start); vis[start] = true; dis[start] = 0; while(!s.empty()) { int cur = s.top(); s.pop(); outstack[cur]++; if(outstack[cur] > n) { return false; } for(int i = head[cur] ; i != -1 ; i = edge[i].nxt) { int x = edge[i].end; if(dis[x] > dis[cur] + edge[i].w) { dis[x] = dis[cur] + edge[i].w; if(!vis[x]) { vis[x] = true; s.push(x); } } } vis[cur] = false; } return true; } int main() { int ncase; scanf("%d",&ncase); while(ncase--) { scanf("%d %d",&n,&m); num_edge = 0; for(int i = 0 ; i <= n ; i++) { head[i] = -1; } for(int i = 0 ; i < m ; i++) { scanf("%d %d %d",&data[i].start,&data[i].end,&data[i].w); addedge(data[i].start,data[i].end,data[i].w); } spfa(1); __int64 ans = 0; for(int i = 1 ; i <= n ; i++) { ans += dis[i]; } num_edge = 0; for(int i = 0 ; i <= n ; i++) { head[i] = -1; } for(int i = 0 ; i < m ; i++) { addedge(data[i].end,data[i].start,data[i].w); } spfa(1); for(int i = 1 ; i <= n ; i++) { ans += dis[i]; } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- poj 1511&&zoj 2008 Invitation Cards 最短路+SPFA
- zoj 2008 && poj 1511 Invitation Cards
- POJ 1511 Invitation Cards 【最短路,spfa算法,Dijkstra算法堆优化】
- POJ 1511 Invitation Cards (SPFA+反向建图)
- poj 1511 Invitation Cards && poj 3268 Silver Cow Party (spfa)
- POJ 1511 Invitation Cards
- [POJ 1511]Invitation Cards[链式前向星][SPFA]
- POJ 1511 Invitation Cards
- POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
- POJ-1511(SPFA找最短路(正向和反向))
- poj 1511 spfa入门
- poj 1511 最短路
- poj 1511&zoj 2008 最短路
- POJ-1511-Invitation Cards(SPFA 反向建图)
- poj 1511 Invitation Cards (spfa+邻接表)
- POJ 1511 Invitation Cards 最短路SPFA
- (POJ 1511)Invitation Cards 有向图来回最短路 + SPFA (复习必看题)
- poj 1511 Invitation Cards spfa比基础题难一些!!练练手挺好
- POJ 1511 【heap+dij】
- POJ-1511(Invitation Cards )——spfa+邻接表