Bellman_Ford算法   求图中是否存在负权值的回路   若图中不存在   则最短路最多经过n-1个结点   若经过超过n-1个节点 则存在负权值的回路  此图永远无法找到最短路  每条边最多经过n-1次松弛~~

#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int INF = 100000000;
const int maxn = 1005;
vector<int> G[maxn];
int weight[maxn][maxn];
queue<int> q;
bool inq[maxn];
int d[maxn],vis[maxn];
int n,m;
bool Bellman_Ford()
{
    for(int i = 0 ; i < n; i++) d[i] = INF,inq[i] = false;
    d[0] = 0;
    memset(vis, 0, sizeof(vis));
    q.push(0);
    inq[0] = true;
    while(!q.empty())
    {
        int u = q.front();
        q.pop();
        inq[u] = false;
        for(int i = 0; i < (int)G[u].size(); i++)
        {
            int v = G[u][i];
            if(d[v] > d[u] + weight[u][v])
            {
                d[v] = d[u] + weight[u][v];
                if(!inq[v])
                {
                    inq[v] = true;
                    vis[v++];
                    if(vis[u] >= n) return true;
                    q.push(v);
                }
            }
        }
    }
    return false;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        for(int i = 0; i < n; i++) G[i].clear();
        for(int i = 0 ; i < m; i++)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            G[u].push_back(v);
            weight[u][v] = w;
        }
        if(Bellman_Ford()) puts("possible");
        else puts("not possible");
    }
    return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<algorithm>
using namespace std; const int N = 2005;
const int INF = 0xffffff; struct Edge
{
int u,v,w;
} edge[N]; int n,m;
int d[N]; bool Bellman_Ford()
{
for(int i = 0; i < n; i++) d[i] = INF;
d[0] = 0;
bool flag;
for(int i = 0; i < n; i++)
{
flag=false;
for(int j = 0; j < m; j++)
{
if(d[edge[j].v] > d[edge[j].u]+edge[j].w)
{
d[edge[j].v] = d[edge[j].u]+edge[j].w;
flag=true;
}
}
if(!flag)
break;
}
for(int j = 0; j < m; j++)
if(d[edge[j].v] > d[edge[j].u]+edge[j].w)
return true;
return false;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(edge,0,sizeof(edge));
scanf("%d%d",&n,&m);
for(int i = 0; i < m; i++)
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
if(Bellman_Ford())
puts("possible");
else
puts("not possible");
}
return 0;
}

uva 558 Bellman_Ford的更多相关文章

  1. UVA 558 判定负环,spfa模板题

    1.UVA 558 Wormholes 2.总结:第一个spfa,好气的是用next[]数组判定Compilation error,改成nexte[]就过了..难道next还是特殊词吗 题意:科学家, ...

  2. uva 558 - Wormholes(Bellman Ford判断负环)

    题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...

  3. UVA 558 Wormholes

    要问是否存在一个总权重为负数的环,用dfs即可解决. time:33ms #include <cstdio> #include <cstring> #define N 3000 ...

  4. UVA 558 Wormholes 【SPFA 判负环】

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  5. uva 558 tree(不忍吐槽的题目名)——yhx

    You are to determine the value of the leaf node in a given binary tree that is the terminal node of ...

  6. UVA - 558 Wormholes (SPEA算法模板题)

    先给出题面:https://vjudge.net/problem/UVA-558 题意描述:给你含n个点以及m条边的图,让你判断在这个图中是否存在负权回路. 首先,我们来介绍什么是SPEA算法 SPF ...

  7. UVA 558 SPFA 判断负环

    这个承认自己没看懂题目,一开始以为题意是形成环路之后走一圈不会产生负值就输出,原来就是判断负环,用SPFA很好用,运用队列,在判断负环的时候,用一个数组专门保存某个点的访问次数,超过了N次即可断定有负 ...

  8. UVa 11090 Going in Cycle!!【Bellman_Ford】

    题意:给出n个点m条边的加权有向图,求平均值最小的回路 自己想的是用DFS找环(真是too young),在比较找到各个环的平均权值,可是代码实现不了,觉得又不太对 后来看书= =好巧妙的办法, 使用 ...

  9. UVa 11090 Going in Cycle!! (Bellman_Ford)

    题意:给定一个加权有向图,求平均权值最小的回路. 析:先十分答案,假设答案是 ans,那么有这么一个回路,w1+w2+w3+...+wk < k*ans,这样就是答案太大,然后移项可得,(w1- ...

随机推荐

  1. Java之日期和时间的计算

    学习是一个循序渐进的过程,不知道你们有没有这样的感受:有很多学习过的知识在很久没有温习之后就不知不觉地还给老师了.所以最近总结,把那些还给老师的再找回来. 运行图: 时间戳: 运行效果图: 时间日期的 ...

  2. Objective-C 【关于导入类(@class 和 #import的区别)】

    之前我们分析过 #include 和 #import 的区别,#import不会引起交叉编译,#import 确定一个文件只能被导入一次,使在递归包含中不会出现问题. 那么 #import 和 @cl ...

  3. GitHub 基本操作流程

    GitHub是最先进的分布式版本控制工具,下面是我学习中总结的操作流程,仅供参考 ----------------------------------------------------------- ...

  4. CKedit在线编辑器

    在线编辑器         在实现所见即得的编辑效果. FCK            是开发者的名字的缩写 CKEditor        功能很完善的,具有,在线编辑与图片上传JS插件 UEdit  ...

  5. strcpy、strncpy、strlcpy的区别

  6. (hdu)5423 Rikka with Tree (dfs)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5423 Problem Description As we know, Rikka is p ...

  7. C/C++编译过程理解【转】

    转载自:http://www.cppblog.com/woaidongmao/archive/2008/11/07/66254.aspx 今天,通过自己的努力终于对C/C++的编译过程有了个粗略的了解 ...

  8. RadioStream应用源码完整版(iphone版和ipad版)

    RadioStream应用源码完整版(iphone版和ipad版),这个项目是从那个ios教程网分析过了的,也是一个不错的国外音乐应用的,支持iphone版和ipad版. <ignore_js_ ...

  9. L012-oldboy-mysql-dba-lesson12

    L012-oldboy-mysql-dba-lesson12 graphite监控mysql可以达到秒级别 Zabbix for mysql NagiosXI daemontools linux    ...

  10. 《RHEL6.3 FTP服务器虚拟用户的配置(含图)》——如此简单

    虚拟用户就是传说中的ftp服务vip用户,大致分为这么几步: 1.安装ftp软件包 yum install *ftp* 2.启动vsftpd服务 /etc/init.d/vsftpd restart  ...