[kuangbin带你飞]专题四 最短路练习 C POJ 1797

来源:互联网 发布:加工中心常用编程代码 编辑:程序博客网 时间:2024/05/21 04:17

题目地址:https://vjudge.net/contest/66569#problem/C

思路:模板题,稍微修改一下松弛条件和放入队列的值即可,注意输出格式。

AC代码:

#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<vector>using namespace std;const int maxn=1000+5;vector<pair<int,int> >E[maxn];int d[maxn];int main(){    int t;    scanf("%d",&t);    for(int casei=1;casei<=t;casei++)    {        int n,m;        scanf("%d%d",&n,&m);        for(int i=0;i<=n;i++)        {            d[i]=0;            E[i].clear();        }        for(int i=0;i<m;i++)        {            int a,b,c;            scanf("%d%d%d",&a,&b,&c);            E[a].push_back(make_pair(b,c));            E[b].push_back(make_pair(a,c));        }        priority_queue<pair<int,int> >q;        d[1]=1e9;        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] && d[v]<E[now][i].second)                {                    d[v]=min(d[now],E[now][i].second);                    q.push(make_pair(d[v],v));                }            }        }        printf("Scenario #%d:\n",casei);        printf("%d\n",d[n]);        if(casei<t)            printf("\n");    }}

0 0
原创粉丝点击