社区讨论

50pts差分约束

P1993小 K 的农场参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@locv56kf
此快照首次捕获于
2023/10/30 20:15
2 年前
此快照最后确认于
2023/11/05 06:48
2 年前
查看原帖
求助dalao,我菜死了
CPP
#include<cstdio>
#include<iostream>
#include<cstring>
#define il inline
#define rg register
#define MAXN 5010
#define INF 0x3f3f3f3f
using namespace std;

template <typename T> il void Iput(T &x)
{
	char c;
	bool f = false;
	while((c=getchar())<'0' || c>'9')	if(c=='-')	f=true;
	x = c^48;
	while((c=getchar())>='0' && c<='9')	x = (x<<1) + (x<<3) + (c^48);
	if(f)	x = -x;
}

template <typename T> void Wri(T x)
{
	if(x > 9)	Wri(x/10);
	putchar(x%10^48);
}

template <typename T> void Oput(T x)
{
	if(x < 0)	putchar('-'), x=-x;
	Wri(x);
}

struct Edge {
	int x, nex, w;
}e[MAXN<<1];

int head[MAXN], tote;

il void ae(int u, int v, int w)
{
	e[++tote].x = v;
	e[tote].w = w;
	e[tote].nex = head[u];
	head[u] = tote;
}

int n, m;

int dis[MAXN];
const int MAXQ = 1<<12;
int q[MAXQ], l, r;
bool in_q[MAXN];
int len[MAXN], ctr[MAXN];

il bool spfa(int s)
{
	l = 1;
	r = 0;
	q[++r & MAXQ-1] = s;
	in_q[s] = true;
	dis[s] = 0;
	while(l<=r)
	{
		int u = q[l++ & MAXQ-1];
		in_q[u] = false;
		for(rg int i=head[u] ; i ; i=e[i].nex)
		{
			int v = e[i].x, w = e[i].w;
			if(dis[v] > dis[u]+w)
			{
				dis[v] = dis[u]+w;
				if(!in_q[v])
				{
					if(++ctr[v]>=n)	return true;
					if((len[v]=len[u]+1)>=n)	return true;
					q[++r & MAXQ-1] = v;
					in_q[v] = true;
				}
			}
		}
	}
	return false;
}

signed main()
{
	freopen("P1993_2.in", "r", stdin);
	
	Iput(n), Iput(m);
	for(rg int i=1 ; i<=m ; ++i)
	{
		int op, u, v, w;
		Iput(op), Iput(u), Iput(v);
		if(op == 1)	//dis[u] <= dis[v]-w
		{
			Iput(w);
			ae(v, u, -w);
		}
		else if(op == 2)	//dis[u] <= dis[v]+w
		{
			Iput(w);
			ae(v, u, w);
		}
		else if(op == 3)	//dis[u] == dis[v]
		{
			ae(u, v, 0);
			ae(v, u, 0);
		}
	}
	memset(dis, 0x3f, sizeof dis);
	for(rg int i=1 ; i<=n ; ++i)
		if(dis[i] == INF)
			if(spfa(i))
			{
				printf("No\n");
				return 0;
			}
	printf("Yes\n");
	
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...