POJ 1797 Heavy Transportation(kuangbin带你飞 专题四:最短路)

来源:互联网 发布:linux安装多个jdk版本 编辑:程序博客网 时间:2024/06/06 02:17

大概题意:有n个城市,m条边,每个边都有最大承载量,就是边权,现在要从1点运送货物到n,求能运货的最大重量。最大运货量必定是运输路上的最小边。看完之后就感觉和上一题类似,直接用最小生成树去做,不过这次是最大生成树吧...只要把1-n联通了就结束,每次找最大值,答案就是连接的最后一个值。

开始WA了三次,以为是写搓了或者思路错了..后来发现输出的是时候没有加冒号,因为我看到和上一题类似,直接用的上一题的输出...但是上一题没冒号这题有...郁闷

#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<iostream>using namespace std;#define inf 0x7fffffffstruct node{    int x,y,s;}e[2000000];int cmp(node a,node b){    return a.s>b.s;}int f[3000],n,m;void inti(){    for(int i=1;i<=n;i++)        f[i]=i;}int find(int x){    if(x!=f[x])        return f[x]=find(f[x]);    return x;}int main(){    int T;    cin>>T;    for(int cas=1;cas<=T;cas++)    {        cin>>n>>m;        inti();        for(int i=0;i<m;i++)            scanf("%d %d %d",&e[i].x,&e[i].y,&e[i].s);        sort(e,e+m,cmp);        int ans=inf;        for(int i=0;i<m;i++)        {            int x=find(e[i].x);            int y=find(e[i].y);            if(x!=y)                f[x]=y;            if(find(1)==find(n))            {                ans=e[i].s;                break;            }        }        printf("Scenario #%d:\n",cas);        printf("%d\n\n",ans);    }    return 0;}


最短路的解法是求最长路,每次更新一下当前最长路的最短边是多少,可以找到n结束,也可以更新完,今天实在是手冻得...不淡定了,所以这个最短路方法以后在更新...

0 0
原创粉丝点击