zoukankan      html  css  js  c++  java
  • poj 3259 Wormholes

    和poj 1860差不多都用bellman—ford最简单的版本就可以了,关键在于巧妙的运用,做过了才能更好地理解》

    #include<stdio.h>
    #include<queue>
    #include<string.h>
    #define INF 100000000
    #define MAXN1 520
    #define MAXN 8000
    
    int u[MAXN],v[MAXN],wt[MAXN], d[MAXN1];
    int n, m, w, T,p;
    
    void init()
    {
        scanf("%d%d%d",&n,&m,&w);
        p = 0;
        for(int i = 0; i < m; i ++)
        {
            scanf("%d%d%d",&u[p],&v[p],&wt[p]);
            p++;
            u[p] = v[p-1];
            v[p] = u[p-1];
            wt[p] = wt[p-1];
            p++;
        }
        for(int i = m; i < m+w; i ++)
        {
            scanf("%d%d%d",&u[p],&v[p],&wt[p]);
            wt[p] = -wt[p];
            p++;
        }
    }
    
    void bellman_ford(int h)
    {
        for(int i = 1; i <= n; i ++) d[i] = 0;
        d[h] = 0;
        for(int k = 0; k < n-1; k ++)
        for(int i = 0; i < p; i ++)
        {
            int x = u[i], y = v[i];
            if(d[x] < INF && d[y] > d[x] + wt[i])
            d[y] = d[x] + wt[i];
        }
    }
    
    int main()
    {
        while(~scanf("%d",&T))
        {
            while(T --)
            {
                init();
                int ok = 0;
                    bellman_ford(1);
                    for(int j = 0; j < p; j ++)
                    {
                        int x = u[j], y = v[j];
                        if(d[x] < INF && d[y] > d[x] + wt[j])
                        {ok = 1; break;}
                    }
                if(ok == 1) printf("YES\n");
                else printf("NO\n");
            }
        }
        return 0;
    }
  • 相关阅读:
    前端工程师须知pc电脑端分辨率
    移动前端的坑
    07.01工作笔记
    缓存
    word-wrap,white-space和text-overflow属性
    页面结构
    Spring Bean的作用域和自动装配
    Spring配置文件
    初识Spring和IOC理解
    MyBatis缓存
  • 原文地址:https://www.cnblogs.com/yuzhaoxin/p/2620170.html
Copyright © 2011-2022 走看看