POJ-3268-Silver Cow Party
2013-03-04 21:09
399 查看
描述:
块田中(1≤N≤1000)都有1只牛去参加盛大的母牛聚会,这个聚会被安排在X号田(1≤X ≤N)。一共有M( 1≤M≤100,000)条单行道分别连接着两块田,且通过路i需要花Ti(1≤Ti≤100)的时间。每头母牛必需参加宴会并且在宴会结束时回到自己的田地,但是每头牛都很懒而喜欢选择化是最少的一个方案。来时的路和去时的可能不一样。求每头牛要来回的最短时间。
找出来回路程最长的。输出来回最长的距离。
大意就直接复制别人的了,解法就是2次求各点到x的最短路径。只是存的时候需要存2次,因为路径是单向路径,并非无向图,所以需要特殊处理一下。这个题用SPFA比较简单,2次求后找出最大值就OK。
代码:
块田中(1≤N≤1000)都有1只牛去参加盛大的母牛聚会,这个聚会被安排在X号田(1≤X ≤N)。一共有M( 1≤M≤100,000)条单行道分别连接着两块田,且通过路i需要花Ti(1≤Ti≤100)的时间。每头母牛必需参加宴会并且在宴会结束时回到自己的田地,但是每头牛都很懒而喜欢选择化是最少的一个方案。来时的路和去时的可能不一样。求每头牛要来回的最短时间。
找出来回路程最长的。输出来回最长的距离。
大意就直接复制别人的了,解法就是2次求各点到x的最短路径。只是存的时候需要存2次,因为路径是单向路径,并非无向图,所以需要特殊处理一下。这个题用SPFA比较简单,2次求后找出最大值就OK。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #define MAX 100001 using namespace std; int n,m,x,e,pnt[MAX],cost[MAX],nxt[MAX],head[MAX],dist[MAX],vis[MAX]; int ea,pnta[MAX],costa[MAX],nxta[MAX],heada[MAX],dista[MAX]; const int inf=1<<28; void addedge(int u,int v,int c) { pnt[e]=v;nxt[e]=head[u];cost[e]=c;head[u]=e++; } void addedgea(int u,int v,int c) { pnta[ea]=v;nxta[ea]=heada[u];costa[ea]=c;heada[u]=ea++; } void SPFA(int x,int *head,int *pnt,int *cost,int *nxt,int *dist) { for(int i=0;i<=n;i++) dist[i]=inf; memset(vis,0,sizeof(vis)); dist[x]=0; queue<int> q; q.push(x); while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i!=-1;i=nxt[i]) { int v=pnt[i]; if(dist[u]+cost[i]<dist[v]) { dist[v]=dist[u]+cost[i]; if(!vis[v]) { vis[v]=1; q.push(v); } } } } } int main() { while(scanf("%d%d%d",&n,&m,&x)!=EOF) { e=ea=0; memset(head,-1,sizeof(head)); memset(heada,-1,sizeof(heada)); for(int i=0;i<m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); addedge(a,b,c); addedgea(b,a,c); } SPFA(x,head,pnt,cost,nxt,dist); SPFA(x,heada,pnta,costa,nxta,dista); int ans=0; for(int i=1;i<=n;i++) ans=max(ans,dist[i]+dista[i]); printf("%d\n",ans); } return 0; }
相关文章推荐
- poj--3268--Silver Cow Party(最短路)(建反向图)
- POJ-3268-Silver Cow Party
- poj3268 - Silver Cow Party (两次最短路)
- poj 3268 Silver Cow Party(最短路,正反两次,这个模版好)
- POJ 3268 Silver Cow Party ( Dijkstra )
- POJ 3268 Silver Cow Party(最短路dijkstra)
- POJ 3268:Silver Cow Party 求单点的来回最短路径
- poj 3268 Silver Cow Party 最短路/dijkstra
- POJ 3268 Silver Cow Party 【单项图,双向spfa】
- poj-3268 Silver Cow Party (最短路-spfa-求到同一起点,同一终点的最短路)
- poj Silver Cow Party 3268 (来回单向最短路)好题
- Poj 3268 Silver Cow Party【SPFA】
- POJ 3268 Silver Cow Party
- POJ - 3268 Silver Cow Party (俩遍最短路)
- POJ 3268 Silver Cow Party (Dijkstra_来回)
- POJ-3268 Silver Cow Party
- poj 3268 Silver Cow Party
- POJ 3268 Silver Cow Party (最短路径)
- POJ 3268:Silver Cow Party 求单点的来回最短路径
- Dijkstra算法:POJ No 3268 Silver Cow Party