SDNUOJ 1139.Emergency

来源:互联网 发布:4行4列矩阵的值怎么求 编辑:程序博客网 时间:2024/06/01 21:21

每次对加入的点更新即可


#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<queue>#include<vector>#define INF 1<<29 // 改成1<<30就WA#include<cmath>#define N 305using namespace std;int n;int can[N],dis[N][N];void update(int k){    int i,j;    for(i=0;i<n;i++){        for(j=0;j<n;j++){            if(dis[i][k]+dis[k][j]<dis[i][j]){                dis[i][j]=dis[i][k]+dis[k][j];            }        }    }}int main(){    int m,q,i,j,c,u,v,w,ics=0;    while(~scanf("%d%d%d",&n,&m,&q)){        if(!n&&!m&&!q)        break;        printf("Case %d:\n",++ics);        for(i=0;i<n;i++)        for(j=0;j<n;j++)        if(i!=j)        dis[i][j]=INF;        else        dis[i][j]=0;        while(m--){            scanf("%d%d%d",&u,&v,&w);            dis[u][v]=min(w,dis[u][v]);        }        memset(can,0,sizeof(can));        while(q--){            scanf("%d",&c);            if(c==0){                scanf("%d",&u);                if(can[u]){                    printf("City %d is already recaptured.\n",u);                    continue;                }                can[u]=1;                update(u);            }            else {                scanf("%d%d",&u,&v);                if(!can[u]||!can[v]){                    printf("City %d or %d is not available.\n",u,v);                    continue;                }                if(dis[u][v]==INF){                    printf("No such path.\n");                    continue;                }                printf("%d\n",dis[u][v]);            }        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击