心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
最终的骨牌要么是关键点,要么是两个关键点中间的两个点。先求最短路,然后求出每条边上的骨牌完全倒下的时间。
以下是我的代码:
#include<algorithm>
#include
<cstdio>
using namespace std;
const int kMaxn(507);
const int kInf(0x7f7f7f7f);

int n,m,g[kMaxn][kMaxn];
int d[kMaxn];

void Dijkstra()
{
    
bool visited[kMaxn]={false};
    
for(int i=1;i<=n;i++)
        d[i]
=(i==1?0:kInf);
    
for(int i=1;i<=n;i++)
    {
        
int p(-1);
        
for(int j=1;j<=n;j++)
            
if(!visited[j] && (p<0 || d[p]>d[j]))
                p
=j;
        visited[p]
=true;
        
for(int j=1;j<=n;j++)
            
if(!visited[j] && g[p][j]<kInf && d[j]>d[p]+g[p][j])
                d[j]
=d[p]+g[p][j];
    }
}

int main()
{
    
/*
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);
    //
*/

    
int T(0);
    
while(scanf("%d%d",&n,&m)==2 && (n || m))
    {
        
for(int i=1;i<=n;i++)
            
for(int j=1;j<=n;j++)
                g[i][j]
=(i==j?0:kInf);
        
for(int i=1;i<=m;i++)
        {
            
int u,v,w;
            scanf(
"%d%d%d",&u,&v,&w);
            g[u][v]
=g[v][u]=w;
        }

        Dijkstra();

        
int ans1(-kInf),key(1);
        
for(int i=1;i<=n;i++)
            
if(ans1<d[i])
            {
                ans1
=d[i];
                key
=i;
            }

        
double ans2(-kInf);
        
int start,end;
        
for(int i=1;i<=n;i++)
            
for(int j=1;j<=n;j++)
                
if(g[i][j]<kInf && ans2<(d[i]+d[j]+g[i][j])/2.0)
                {
                    ans2
=(d[i]+d[j]+g[i][j])/2.0;
                    start
=i;
                    end
=j;
                }

        T
++;
        printf(
"System #%d\n",T);
        
if(ans1>=ans2)
            printf(
"The last domino falls after %.1f seconds, at key domino %d.\n\n",(double)ans1,key);
        
else
            printf(
"The last domino falls after %.1f seconds, between key dominoes %d and %d.\n\n",ans2,start,end);
    }

    
return 0;
}
posted on 2011-07-31 09:32 lee1r 阅读(334) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:图论

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理