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

    额,还是一个路径问题,不过这次是判断是否存在负权回路,这个直接用bellman ford 算法做就行了,只要松弛次数超过n次,则证明存在负权回路

    这个在说benllman ford算法的时候解释的很详细了,不过现在不太敢用INT_MAX来表示最大的整数了,动不动就溢出了

    #include<iostream>
    #define MAXINT 9999999
    using namespace std;
    int n,m,w,dis[510];
    struct Edge
    {
    	int u,v,weight;
    }edge[5220];
    void relax(int u, int v, int weight)
    {
    	if(dis[v] > dis[u] + weight)
    		dis[v] = dis[u] + weight;
    }
     
    bool Bellman_Ford()
    {
    	for(int i=1; i<=n-1; ++i)
    		for(int j=1; j<=2*m+w; ++j)
    			relax(edge[j].u, edge[j].v, edge[j].weight);
    	bool flag = 1;
    	// 判断是否有负环路
    	for(int i=1; i<=2*m+w; ++i)
    		if(dis[edge[i].v] > dis[edge[i].u] + edge[i].weight)
    		{
    			flag = 0;
    			break;
    		}
    	return flag;
    }
    
    int main()
    {
    	int cas;
    	cin>>cas;
    	while(cas--)
    	{
    		cin>>n>>m>>w;
    		int i;
    		for(i=1;i<=n;i++)
    			dis[i]=MAXINT;
    		dis[1]=0;
    		for(i=1;i<m*2;i+=2)
    		{
    			cin>>edge[i].u>>edge[i].v>>edge[i].weight;
    			edge[i+1].u=edge[i].v;
    			edge[i+1].v=edge[i].u;
    			edge[i+1].weight=edge[i].weight;
    		}
    		int a;
    		for(int j=0;j<w;j++)
    		{
    			cin>>edge[i].u>>edge[i].v>>a;
    			edge[i].weight=0-a;
    			i++;
    		}
    		if(!Bellman_Ford())
    			cout<<"YES"<<endl;
    		else cout<<"NO"<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    iOS6后的内存警告处理
    key things of ARC
    敏捷软件开发Note
    ViewController的属性
    sizeToFit & sizeThatFits
    iOS静态库的制作与引用
    xcode添加build phase
    什么是HUD
    xcode中的预定义宏
    管理授权&管理决策&管理组织&管理目标
  • 原文地址:https://www.cnblogs.com/nanke/p/2136801.html
Copyright © 2011-2022 走看看