标签:des style http color os io strong for
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 8848 | Accepted: 2210 |
Description
Input
Output
Sample Input
2 1 1 2 27 3 3 1 2 5 1 3 5 2 3 5 0 0
Sample Output
System #1 The last domino falls after 27.0 seconds, at key domino 2. System #2 The last domino falls after 7.5 seconds, between key dominoes 2 and 3.
Source
题意:有很多骨牌,有一些关键牌,它们一旦倒下,和它们相连的各个普通行都倒下,求最后一个倒下的牌所用时间和位置。
注意:有的行特别长,所以有可能行中间的最后倒下。
#include"stdio.h"
#include"string.h"
#include"queue"
#include"algorithm"
using namespace std;
#define N 505
#define inf 0x7fffffff
int mark[N],g[N][N];
int dis[N];
void dijkstra(int s,int n)
{
int i,u,min;
for(i=1;i<=n;i++)
{
dis[i]=g[s][i];
mark[i]=0;
}
mark[s]=1;
while(1)
{
u=0;
min=inf;
for(i=1;i<=n;i++)
{
if(!mark[i]&&min>dis[i])
{
min=dis[i];
u=i;
}
}
if(u==0)
break;
mark[u]=1;
for(i=1;i<=n;i++)
{
if(!mark[i]&&g[u][i]<inf&&dis[i]>dis[u]+g[u][i])
dis[i]=dis[u]+g[u][i];
}
}
}
void work(int n)
{
int i,j,k0,k1,k2;
double t1,t2;
t1=t2=-inf; //有坑,时间可以为零
for(i=1;i<=n;i++)
{
if(t1<dis[i])
{
t1=dis[i];k0=i;
}
}
for(i=1;i<=n;i++) //某一普通行可能很长很长
{
for(j=1;j<=n;j++)
{
if(g[i][j]<inf&&t2<(dis[i]+dis[j]+g[i][j])/2.0)
{
if(i<j) {k1=i;k2=j;}
else {k1=j;k2=i;}
t2=(dis[i]+dis[j]+g[i][j])/2.0;
}
}
}
if(t1<t2)
printf("The last domino falls after %.1f seconds, between key dominoes %d and %d.\n",t2,k1,k2);
else
printf("The last domino falls after %.1f seconds, at key domino %d.\n",t1,k0);
}
int main()
{
int i,j,n,m,u,v,w,cnt=1;
while(scanf("%d%d",&n,&m),n||m)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
g[i][j]=(i==j?0:inf);
}
}
for(i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
g[u][v]=g[v][u]=w;
}
printf("System #%d\n",cnt++);
dijkstra(1,n);
work(n);
puts("");
}
return 0;
}
poj 1135 Domino Effect (dijkratra算法),布布扣,bubuko.com
poj 1135 Domino Effect (dijkratra算法)
标签:des style http color os io strong for
原文地址:http://blog.csdn.net/u011721440/article/details/38659309