zoukankan      html  css  js  c++  java
  • [BZOJ4500]矩阵

    相当于是V[x]+V[y]=c(x是行,y是列,c是这个点的点权)

    然后我们就可以用二分图判定一下是否可行。找个有点权的点随便dfs一下就行了。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int N=2005;
    int n,m,k,lst,dis[N];
    bool vis[N];
    struct Edge{
        int to[N],nxt[N],val[N],ecnt,head[N];
        void init(){
            memset(head,0,sizeof head);
            ecnt=0;
            memset(vis,0,sizeof vis);
        }
        void add(int bg,int ed,int v) {
            nxt[++ecnt]=head[bg];
            to[ecnt]=ed;
            val[ecnt]=v;
            head[bg]=ecnt;
        }
        void ins() {
            int x,y,c;
            scanf("%d%d%d",&x,&y,&c);
            add(x,y+n,c);
            add(y+n,x,c);
            lst=x;
        }
    }e;
    bool dfs(int x){ 
        vis[x]=1;
        for(int i=e.head[x];i;i=e.nxt[i]) {
            int v=e.to[i];
            if(!vis[v]) {
                dis[v]=e.val[i]-dis[x];
                if(!dfs(v)) return 0;
            }    
            else {
                if(dis[v]!=e.val[i]-dis[x]) return 0;
            }
        }
        return 1;
    }
    void solve() {
        e.init();
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=k;i++) e.ins();
        dis[lst]=0;
        if(dfs(lst)) puts("Yes");else puts("No");
    }
    int main() {
        int T;
        scanf("%d",&T);
        while(T--) solve();
    }
    矩阵
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    C++虚函数表理解
    【转】c++虚函数实现原理
    【转】运输层TCP协议详细介绍
    【转】计算机中浮点数的表示
    ARP跨网段广播
    【转】arm和x86的区别
    面向对象六大原则
    安卓 热修复的原理
    Zygote和System进程的启动过程
    Android内存泄漏
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9740743.html
Copyright © 2011-2022 走看看