zoukankan      html  css  js  c++  java
  • 【BZOJ 4500 矩阵】

    Time Limit: 1 Sec  Memory Limit: 256 MB
    Submit: 390  Solved: 217
    [
    Submit][Status][Discuss]

    Description

    有一个n*m的矩阵,初始每个格子的权值都为0,可以对矩阵执行两种操作:

    1. 选择一行, 该行每个格子的权值加1或减1。

    2. 选择一列, 该列每个格子的权值加1或减1。

    现在有K个限制,每个限制为一个三元组(x,y,c),代表格子(x,y)权值等于c。问是否存在一个操作序列,使得操作完后的矩阵满足所有的限制。如果存在输出”Yes”,否则输出”No”。

    Input

    先输入一个T(T <= 5)代表输入有T组数据,每组数据格式为:

    第一行三个整数n, m, k (1 <= n, m,k <= 1000)。

    接下来k行,每行三个整数x, y, c。

    Output

    对于每组数据,输出Yes或者No。

    Sample Input

    2
    2 2 4
    1 1 0
    1 2 0
    2 1 2
    2 2 2
    2 2 4
    1 1 0
    1 2 0
    2 1 2
    2 2 1

    Sample Output

    Yes
    No

    HINT

    Source

    【题解】

        ①行列差分约束。

        ②每个行每个列看做一个点。

        ③建立超级源点保证图连通,进行一次SPFA即可解决。

    #include<queue>
    #include<stdio.h>
    #define inf 1000000007
    #define go(i,a,b) for(int i=a;i<=b;i++)
    #define fo(i,a,x) for(int i=a[x],v=e[i].v;i;i=e[i].next,v=e[i].v)
    const int N=2010;
    struct E{int v,next,w;}e[N<<2];
    int T,n,m,K,head[N],k,x,y,v,S,d[N],vis[N];bool inq[N],bad;
    void ADD(int u,int v,int w){e[k]=(E){v,head[u],w};head[u]=k++;}
    
    bool SPFA()
    {
    	std::queue<int>q;d[S]=0;
    	while(!q.empty())q.pop();q.push(S);int u;
    	while(!q.empty())
    	{
    		inq[u=q.front()]=0;q.pop();
    		fo(i,head,u)if(d[u]+e[i].w<d[v])
    		{
    			d[v]=d[u]+e[i].w;	
    			if((++vis[v])>(n+m))return 0;	
    			if(!inq[v])inq[v]=1,q.push(v);
    		}
    	}
    	return 1;
    }
    
    int main()
    {
    	scanf("%d",&T);
    	while(T--&&scanf("%d%d%d",&n,&m,&K))
    	{
    		go(i,0,n+m)d[i]=inf,head[i]=inq[i]=vis[i]=0;bad=0;k=1;
    		go(i,1,K)scanf("%d%d%d",&x,&y,&v),ADD(x,y+n,v),ADD(y+n,x,-v);
    		go(i,1,n+m)ADD(S,i,0);puts(SPFA()?"Yes":"No");
    	}
    	return 0;
    }//Paul_Guderian
    

    .

  • 相关阅读:
    CodeForces 681D Gifts by the List (树上DFS)
    UVa 12342 Tax Calculator (水题,纳税)
    CodeForces 681C Heap Operations (模拟题,优先队列)
    CodeForces 682C Alyona and the Tree (树上DFS)
    CodeForces 682B Alyona and Mex (题意水题)
    CodeForces 682A Alyona and Numbers (水题,数学)
    Virtualizing memory type
    页面跳转
    PHP Misc. 函数
    PHP 5 Math 函数
  • 原文地址:https://www.cnblogs.com/Damitu/p/7805476.html
Copyright © 2011-2022 走看看