PersonalCorpus 版 (精华区)

40645 2002-10-11 11:12:24 Accepted
1298 C++ 00:00.03 1716K Big Guava

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
#include <ctype.h>

int dl[500][500];
int b[500];
int l[500000][3];

void dijkstra (int from, int n)
{
    int best, best_j, i, j;
    bool mark[500];

    memset(mark,0,sizeof(mark));
    mark[from]=true; b[from]=0;
    do {
        best=0;
        for (i=0;i<n;i++) if (mark[i]) for (j=0;j<n;j++)
            if ((!mark[j])&&(dl[i][j]!=0)) if 
((best==0)||(b[i]+dl[i][j]<best)) {
                best=b[i]+dl[i][j];
                best_j=j;
            }
        if (best!=0) {
            b[best_j]=best;
            mark[best_j]=true;
        }
    } while (best!=0);
}

int main()
{
#ifndef ONLINE_JUDGE
    freopen("c:\\0acm\\zju\\i1298","r",stdin);
    freopen("c:\\0acm\\zju\\o1298","w",stdout);
#endif

    int i,j,k,n,m,c,d,e,t=0;
    double res,temp;

    while (1) {
        scanf("%d%d\n",&n,&m);
        if ((n==0)&&(m==0)) break; else t++;
        memset(dl,0,sizeof(dl));
        for (i=0;i<m;i++) {
            scanf("%d%d%d\n",&c,&d,&e); c--; d--;
            if ((dl[c][d]==0)||(dl[c][d]>e)) {  dl[c][d]=e; dl[d][c]=e;
 }
            l[i][0]=c; l[i][1]=d; l[i][2]=e;
        }
        dijkstra(0,n);
        k=0; for (i=1;i<n;i++) if (b[i]>b[k]) k=i;
        res=b[k]; c=-1;
        for (i=0;i<m;i++) if (abs(b[l[i][0]]-b[l[i][1]])<l[i][2]) {
            temp=((double)(l[i][2]-abs(b[l[i][0]]-b[l[i][1]]))) /2;
            if (b[l[i][0]]>b[l[i][1]]) temp+=b[l[i][0]];
                else temp+=b[l[i][1]];
            if (temp>res) {
                res=temp;
                c=l[i][0];
                d=l[i][1];
            }
        }
        printf("System #%d\n",t);
        if (c<0)
            printf("The last domino falls after %.1lf seconds, at key 
domino %d.\n\n",res,k+1);
        else
            printf("The last domino falls after %.1lf seconds, between 
key dominoes %d and %d.\n\n",res,c+1,d+1);
    }
}
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.906毫秒