POJ 3268 Silver Cow Party dijkstra();
2016-08-04 17:26
381 查看
题意:输入n,m,x,分别表示有n头牛,m条单向路径,以第x头牛(下用牛X表示)为起点。
每头牛都将会1.先拜访牛X,2.后返回自己原先的位置。求出所有牛花费时间中的最大值。
解题方法:首先,2.每头牛返回到自己原先位置,这个容易求,也就是求牛X到每头牛的最短时间(单源最短路)。
而求每头牛拜访牛X的时间,可以将题目所给的所有路径,全部调反,然后再求牛X到每头牛的最短时间(单源最短路)。
最后相加,找出最大值即可。
每头牛都将会1.先拜访牛X,2.后返回自己原先的位置。求出所有牛花费时间中的最大值。
解题方法:首先,2.每头牛返回到自己原先位置,这个容易求,也就是求牛X到每头牛的最短时间(单源最短路)。
而求每头牛拜访牛X的时间,可以将题目所给的所有路径,全部调反,然后再求牛X到每头牛的最短时间(单源最短路)。
最后相加,找出最大值即可。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,s,dis1[1005],map[1005][1005],dis2[1005]; bool vis[1005]; const int inf=1e9; int dijkstra() { memset(vis,0,sizeof(vis)); for(int i=1;i<=n;++i) dis1[i]=map[s][i]; vis[s]=1; int u; for(int i=0;i<n-1;++i) { int mins=inf; for(int j=1;j<=n;++j) { if(dis1[j]<mins&&!vis[j]) { u=j; mins=dis1[j]; } } vis[u]=1; for(int j=1;j<=n;++j) { dis1[j]=min(dis1[j],dis1[u]+map[u][j]); } } for(int i=1;i<=n;++i) { for(int j=1;j<i;++j) { int c=map[i][j]; map[i][j]=map[j][i]; map[j][i]=c; } } memset(vis,0,sizeof(vis)); for(int i=1;i<=n;++i) dis2[i]=map[s][i]; vis[s]=1; for(int i=0;i<n-1;++i) { int mins=inf; for(int j=1;j<=n;++j) { if(!vis[j]&&dis2[j]<mins) { u=j; mins=dis2[j]; } } vis[u]=1; for(int j=1;j<=n;++j) { dis2[j]=min(dis2[j],dis2[u]+map[u][j]); } } int ans=-1; for(int i=1;i<=n;++i) { ans=max(ans,dis1[i]+dis2[i]); } return ans; } int main() { while(scanf("%d%d%d",&n,&m,&s)==3) { for(int i=0;i<=n;++i) { for(int j=0;j<=n;++j) map[i][j]=inf; map[i][i]=0; } int a,b,c; for(int i=0;i<m;++i) { scanf("%d%d%d",&a,&b,&c); map[a][b]=c; } printf("%d\n",dijkstra()); } }
相关文章推荐
- POJ-3268-Silver Cow Party [最短路][Dijkstra]
- POJ-3268 Silver Cow Party[Dijkstra] [邻接矩阵] [置换矩阵]
- Dijkstra-POJ-3268-Silver Cow Party
- POJ 3268 Silver Cow Party 最短路 dijkstra
- POJ 3268 Silver Cow Party (dijkstra)
- POJ 3268 - Silver Cow Party(最短路dijkstra)
- [POJ 3268 Silver Cow Party ]Dijkstra
- POJ - 3268 Silver Cow Party (往返最短路,Floyd,Dijkstra 2次优化)
- POJ 3268 Silver Cow Party (Dijkstra_来回)
- POJ - 3268 Silver Cow Party解题报告(dijkstra分别求单源起点和单源终点的最短路)
- POJ 3268 Silver Cow Party——dijkstra
- POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】
- poj 3268 Silver Cow Party【dijkstra】
- POJ 3268 Silver Cow Party ( Dijkstra )
- (简单) POJ 3268 Silver Cow Party,Dijkstra。
- POJ 3268 Silver Cow Party【Dijkstra】
- poj 3268 Silver Cow Party 最短路/dijkstra
- POJ 3268 Silver Cow Party (dijkstra来回最短路)
- Poj 3268 Silver Cow Party【dijkstra+逆向建图】
- DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards