zoukankan      html  css  js  c++  java
  • bzoj 1715: [Usaco2006 Dec]Wormholes 虫洞【spfa判负环】

    tag是假的,用了及其诡异的方法判负环
    正权无向边和负权有向边的图

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N=505,inf=210000000;
    int n,m,w,h[N],cnt,d[N];
    struct qwe
    {
        int ne,to,va;
    }e[N*N];
    int read()
    {
    	int r=0,f=1;
    	char p=getchar();
    	while(p>'9'||p<'0')
    	{
    		if(p=='-')
    			f=-1;
    		p=getchar();
    	}
    	while(p>='0'&&p<='9')
    	{
    		r=r*10+p-48;
    		p=getchar();
    	}
    	return r*f;
    }
    void add(int u,int v,int w)
    {
        cnt++;
        e[cnt].ne=h[u];
        e[cnt].to=v;
        e[cnt].va=w;
        h[u]=cnt;
    }
    bool ok()
    {
        for(int i=1;i<=n;i++)
    		d[i]=inf;
        d[1]=0;
        for(int i=1;i<n;i++)
    		for(int j=1;j<=n;j++)
    			for(int k=h[j];k;k=e[k].ne)
    				if(d[e[k].to]>e[k].va+d[j])
    					d[e[k].to]=e[k].va+d[j];
        for(int i=1;i<=n;i++)
    		for(int j=h[i];j;j=e[j].ne)
    			if(d[e[j].to]>d[i]+e[j].va)
    				return 1;
        return 0;
    }
    int main()
    {
        int T=read();
        while(T--)
        {
            memset(h,0,sizeof(h));
            cnt=0;
    		n=read(),m=read(),w=read();
            for(int i=1;i<=m;i++)
            {
                int x=read(),y=read(),z=read();
                add(x,y,z),add(y,x,z);
            }
            for(int i=1;i<=w;i++)
            {
                int x=read(),y=read(),z=read();
                add(x,y,-z);
            }
            if(ok())
    			puts("YES");
            else
    			puts("NO");
        }
        return 0;
    }
    
  • 相关阅读:
    centos 7.5搭建oracle DG
    oracle 11g修改归档日志目录及大小
    oracle修改数据文件路径
    oracle 11g调优常用语句
    MySQL MHA安装配置
    mysql中的数据库操作
    mysql 中用户与权限的操作
    percona server安装
    mysql配置文件相关
    条件判断中的真假
  • 原文地址:https://www.cnblogs.com/lokiii/p/8987359.html
Copyright © 2011-2022 走看看