POJ 3268Silver Cow Party (迪杰斯特拉)

来源:互联网 发布:java入门到精通4 pdf 编辑:程序博客网 时间:2024/06/05 10:39

题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66569#problem/D

代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn=1005;int maps1[maxn][maxn];int maps2[maxn][maxn];int dis1[maxn];int dis2[maxn];int book[maxn];int n,m,x;int dij(int maps[maxn][maxn],int dis[maxn]){    memset(book,0,sizeof(book));    book[x]=1;    for(int i=1;i<=n;i++)    {        dis[i]=maps[x][i];    }    int temp;    for(int i=1;i<=n;i++)    {        int minn=1e9;        for(int j=1;j<=n;j++)        {            if(book[j]==0&&dis[j]<minn)            {                minn=dis[j];                temp=j;            }        }        book[temp]=1;        for(int v=1;v<=n;v++)        {            if(book[v]==0&&dis[v]>dis[temp]+maps[temp][v])            {                dis[v]=dis[temp]+maps[temp][v];            }        }    }    for(int i=1;i<=n;i++)    {        //printf("%d ",dis[i]);    }}int main(){    scanf("%d%d%d",&n,&m,&x);    for(int i=1;i<maxn;i++)    {        for(int j=1;j<maxn;j++)        {            maps1[i][j]=1e9;            maps2[i][j]=1e9;        }    }    for(int i=0;i<m;i++)    {        int a,b,c;        scanf("%d%d%d",&a,&b,&c);        maps1[a][b]=c;        maps2[b][a]=c;    }    dij(maps1,dis1);    dij(maps2,dis2);    int ans=0;    for(int i=1;i<=n;i++)    {        if(i==x)            continue;        ans=max(ans,dis1[i]+dis2[i]);    }    printf("%d\n",ans);}

两个dij 跑一下。不敢相信的1A。

0 0
原创粉丝点击