Silver Cow Party
来源:互联网 发布:蓝天模具风扇调节软件 编辑:程序博客网 时间:2024/04/27 19:41
http://poj.org/problem?id=3268
题目大意;有N个农厂,其中标号为x的农场要举行party,其余农场的牛要去参加,但是牛都很懒,所以不管是过去还是回来,牛都会走对于他们自己而言最短的路,要你求出所有牛中走得时间最长的一个。
思路;Dijkstra()算法变形,也可以用SPFA算法(不过这个暂时还不怎么理解),先求出到x农场的最短距离,再转置矩阵,然后求出回去的最短距离,因为这里的路是单向的 所以得求两次。最后输出最长的一个。
一直在想一种不用转置的方法,就是在引用函数的时候加入x的值,ex:void Dijkstra(int m),然后主函数调用的时候
Dijkstra(x),后来才想通是要求所有的,并不是让你去求特定的某个路径。
#include<iostream>#include<string>#include<cmath>using namespace std;#define INF 500000int sum[1050];int map[1050][1050];int dis[1050],mark[1050];int x,n,i,j;void d(){int min,k;memset(dis,0,sizeof(dis));memset(mark,0,sizeof(mark));for(i=1;i<=n;i++){dis[i]=map[x][i];}dis[x]=0;mark[x]=1;for(i=2;i<=n;i++){min=INF;for(j=1;j<=n;j++){if(!mark[j]&&min>dis[j]){k=j;min=dis[j];}}mark[k]=1;sum[k]+=min;for(j=1;j<=n;j++){if(!mark[j]&&map[k][j]+dis[k]<dis[j]){dis[j]=map[k][j]+dis[k];}}}}void up(){int t;for(i=1;i<=n;i++){for(j=1;j<=i;j++){t=map[i][j];map[i][j]=map[j][i];map[j][i]=t;}}}int main(){int m,le,max;while(scanf("%d %d %d",&n,&m,&x)!=EOF){max=0;memset(sum,0,sizeof(sum));memset(map,INF,sizeof(map));while(m--){scanf("%d %d %d",&i,&j,&le);map[i][j]=le;}d();up();d();for(i=1;i<=n;i++){if(max<sum[i])max=sum[i];}cout<<max<<endl;}return 0;}
- Silver Cow Party
- POJ3268:Silver Cow Party
- poj3268 - Silver Cow Party
- POJ3268 Silver Cow Party
- POJ3268 Silver Cow Party
- Silver Cow Party
- poj_3268 Silver Cow Party
- POJ3268 Silver Cow Party
- K - Silver Cow Party
- poj3268-Silver Cow Party
- Silver Cow Party
- Silver Cow Party
- Silver Cow Party
- poj Silver Cow Party
- POJ3268-Silver Cow Party
- poj Silver Cow Party
- poj3268 Silver Cow Party
- Silver Cow Party
- HDU 4267 A Simple Problem with Integers
- 题目1172:哈夫曼树
- C语言面试题大汇总之华为面试题
- MySQL 大DML操作建议
- Android Support V7 包中 ActionBar的使用 (1) 添加Action Item
- Silver Cow Party
- 网上看见的一个骑行兄弟的装备,说不定哪天我也出发了
- freopen重定向stdin和stdout之后如何回复正常
- oracle存储过程返回数组给java程序
- Linux下 sudo命令
- HDU——2022—— 海选女主角
- cocos2dx之触摸事件
- Linux 电子书 (基于linux-3.9.7 QT210)
- 01-复制上一行到下一行代码的快捷键