您的位置:首页 > 其它

[kuangbin带你飞]专题四 最短路练习 G POJ 1502

2016-10-11 08:17 399 查看
题目地址:https://vjudge.net/contest/66569#problem/G

思路:这题充分体现了英语的重要性……读题时间比我打代码时间长至少一倍。其实题目很简单,就是给你n个点,从第一个点给每个点发消息,问最小的时间。因为消息可以同时发送,所以这个实际求的就是从第一个点开始到其他点的最短路中的最大值。

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int maxn=105;
vector<pair<int,int> >E[maxn];
int d[maxn];

int main()
{
int n;
while( ~scanf("%d",&n))
{
for(int i=0;i<maxn;i++)
{
E[i].clear();
d[i]=0x3f3f3f3f;
}
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++)
{
char temp[10];
scanf("%s",&temp);
int temp1=0;
if(temp[0]=='x')
temp1=0x3f3f3f3f;
else
{
int len=strlen(temp);
int t=1;
for(int i=len-1;i>=0;i--)
{
temp1+=t*(temp[i]-'0');
t=t*10;
}
}
//printf("%d\n",temp1);
E[i].push_back(make_pair(j,temp1));
E[j].push_back(make_pair(i,temp1));
}
}
priority_queue<pair<int,int> >q;
d[1]=0;
q.push(make_pair(-d[1],1));
while(!q.empty())
{
int now=q.top().second;
q.pop();
for(int i=0;i<E[now].size();i++)
{
int v=E[now][i].first;
if(d[v]>d[now]+E[now][i].second)
{
d[v]=d[now]+E[now][i].second;
q.push(make_pair(-d[v],v));
}
}
}
int sum=0;
for(int i=2;i<=n;i++)
{
if(sum<d[i])
sum=d[i];
}
printf("%d\n",sum);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: