bzoj 4500: 矩阵 差分约束

57人阅读 评论(0) 收藏 举报
分类:

题目链接


【想说的话】

依旧没有什么想说的...


【题解】

对于每个三元组(x,y,z)

点x向点n+y连接一个权值为z的边

点n+y向x点连接一个权值为-z的边

然后跑dfs

当找到一个访问过的点,并且到这个点的距离与之前记录的距离不一样,那么就一定不合法


【代码】

#include<bits/stdc++.h>

#define mod 1000000007
#define MAXN 2020

typedef long long ll;

using namespace std;

inline int rd(){
	int x=0,y=1;char c=getchar();
	while(c<'0' || c>'9'){if(c=='-')y=-y;c=getchar();}
	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
	return x*y;
}

struct node{
	int to,len;
	node(int x,int y){to=x,len=y;}
};

int T,n,m,k;
bool vis[MAXN],flag;
int dis[MAXN];
vector<node>v[MAXN];

void pre(){
	memset(vis,0,sizeof(vis));
	memset(dis,0,sizeof(dis));
	for(int i=1; i<=n+m; i++)v[i].clear();
}

void dfs(int x){
	vis[x]=1;
	for(int i=0; i<v[x].size(); i++){
		int to=v[x][i].to;
		int len=v[x][i].len;
		if(!vis[to]){
			dis[to]=dis[x]+len;
			dfs(to);
		}
		else if(vis[to] && dis[to]!=dis[x]+len)flag=false;
	}
}

void work(){
	flag=true;
	n=rd(),m=rd(),k=rd();
	pre();
	for(int i=0; i<k; i++){
		int x=rd(),y=rd(),z=rd();
		v[x].push_back(node(n+y,z));
		v[n+y].push_back(node(x,-z));
	}
	for(int i=1; i<=n+m; i++)if(!vis[i])dfs(i);
	if(!flag)puts("No");
	else puts("Yes");
}

int main(){
	T=rd();
	while(T--)work();
	
	return 0;
}
查看评论

BZOJ 4500: 矩阵 差分约束

4500: 矩阵 Time Limit: 1 Sec  Memory Limit: 256 MB Submit: 341  Solved: 193 [Submit][Status][Discus...
  • BlackJack_
  • BlackJack_
  • 2017-06-19 09:43:14
  • 115

bzoj1731(差分约束系统,重点!)

这题就是裸的差分约束,但是特殊情况的判定值得学习。 1: 文中说“如果不存在满足要求的方案,输出-1;” bzoj2330中也说“如果不能满足小朋友们的所有要求,就输出-1。” 不满足要求...
  • zhhx2001
  • zhhx2001
  • 2016-08-21 13:00:33
  • 466

[bzoj2788][Poi2012]Festival floyd 差分约束系统 tarjan

2788: [Poi2012]Festival Time Limit: 30 Sec  Memory Limit: 64 MB [Submit][Status][Discuss] Descriptio...
  • youhavepeople
  • youhavepeople
  • 2017-08-02 17:59:08
  • 183

BZOJ 2788 [Poi2012]Festival 差分约束+tarjan+floyd

BZOJ 2788 [Poi2012]Festival 差分约束+tarjan+floyd
  • wzq_QwQ
  • wzq_QwQ
  • 2015-09-06 16:11:50
  • 1642

狡猾的商人_bzoj1202_差分约束

Description刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的。账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3…n-1,n), 。当 Ai大...
  • jpwang8
  • jpwang8
  • 2016-11-29 21:41:31
  • 217

【bzoj1731】[Usaco2005 dec]Layout 排队布局 差分约束

差分约束的裸题,一开始没有看见“奶牛排在队伍中的顺序和它们的编号是相同的”这句话,所以不知道怎么处理。 最大距离——最短路 记第i头牛的位置为di di>=di-1 i向i-1连一条权值为0的...
  • u012288458
  • u012288458
  • 2016-02-11 15:44:22
  • 692

bzoj 3436: 小K的农场 (差分约束)

题目描述传送门题解代码#include #include #include #include #include #include #define N 200003 #define inf 100000...
  • clover_hxy
  • clover_hxy
  • 2017-04-24 07:21:54
  • 127

【bzoj3373】【说谎的牲畜】【差分约束】

Description 兽群中总是有一些麻烦制造者.约翰知道他的N(1≤N≤100)头奶牛中有一头总是说谎,其他的总是说真话.他想快速的找出这个麻烦制造者.为了实现这个目标,他一个一个的问这...
  • sunshinezff
  • sunshinezff
  • 2016-04-14 09:37:43
  • 243

【bzoj3436】 小K的农场 差分约束系统

差分约束系统,a到b有一条长度为c的边,表示b至多比a多c。 那么对于操作1,a比b多至少c,等价于b比a多至多-c。 然后矛盾的情况就是,a比a至多 #include #include #inc...
  • u012288458
  • u012288458
  • 2015-09-24 21:52:18
  • 830

bzoj 4500: 矩阵

开始以为建出图来搞高斯消元,然后把每个数线性表示写出来。 看题解发现想复杂了,直接任意构造解就行了。 对于限制条件 a[1]+b[1]=c[1] a[2]+b[1]=c[2] a[2]+b[...
  • heheda_is_an_OIer
  • heheda_is_an_OIer
  • 2016-04-12 14:16:25
  • 466
    个人资料
    持之以恒
    等级:
    访问量: 5万+
    积分: 1827
    排名: 2万+
    最新评论