zoukankan      html  css  js  c++  java
  • POJ 3169 Layout

    思路:

    这题完全按照挑战上面的方法来做,开始我不是很能理解这种方法的含义。请自行阅读挑战。

    一开始我超时了,不知道是什么原因,我写了一个队列优化的bellman ford ,还用了vector的邻接表,不知道为什么会超时。。。其实回头看一下,bellman ford根本就不需要邻接表。。。。

    回头再看一下那个队列优化吧,感觉是自己写崩了。

    后来直接重写,最普通的那种bellamn ford 结果过了。。。。

    随便说一下,感觉挑战上面的写法有问题,奶牛的编号是从一开始的,可是挑战上面奶牛的编号貌似是从0开始的

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int inf=2100000000;
    int u[30000],v[30000],w[30000];
    int dis[10086];
    int main()
    {
        int n,ml,md;
        scanf("%d%d%d",&n,&ml,&md);
        int t=0;
        for(int i=2;i<=n;i++){
            u[t]=i;v[t++]=i-1;
        }
        int x,y,wa;
        for(int i=1;i<=ml;i++){
            scanf("%d%d%d",&u[t],&v[t],&w[t]);
            t++;
        }
        for(int i=1;i<=md;i++){
            scanf("%d%d%d",&v[t],&u[t],&w[t]);
            w[t]*=-1;t++;
        }
        fill(dis,dis+n+5,inf);
        int flag=0;
        dis[1]=0;
        for(int k=0;k<n;k++){
            flag=0;
            for(int i=0;i<t;i++){
                if(dis[v[i]]>dis[u[i]]+w[i]){
                    dis[v[i]]=dis[u[i]]+w[i];
                    flag=1;
                }
            }
            if(!flag){break;}
        }
        if(dis[1]<0){printf("-1
    ");}
        else if(dis[n]==inf){printf("-2
    ");}
        else printf("%d
    ",dis[n]);
    }
  • 相关阅读:
    最大流最小割——bzoj1001狼抓兔子,洛谷P2598
    求最小公因数和最大公倍数
    归并排序
    Splay
    Tarjan判断为什么不能把dfn写成low
    2-SAT问题
    离散数学-传递闭包(POJ3275)
    POJ3190
    安装环境gcc;
    二分折半排序
  • 原文地址:https://www.cnblogs.com/ZGQblogs/p/9093095.html
Copyright © 2011-2022 走看看