ppip @ 2022-04-25 20:57:01
Link
题目大意:给定一堆
代码(删除了不必要元素):
#include <bits/stdc++.h>
using namespace std;
const int MAXN{1000};
int f[MAXN*2+5],dis[MAXN*2+5];
int getf(int x)
{
if (f[f[x]]==f[x]) return f[x];
getf(f[x]);
dis[x]+=dis[f[x]];
return f[x]=f[f[x]];
}
void merge(int x,int y,int z)
{
dis[f[x]]=z-dis[x]+dis[y];
f[f[x]]=f[y];
}
int main()
{
int n,m,k;scanf("%d %d %d",&n,&m,&k);
for (int i{1};i<=n+m;++i)
{
f[i]=i;
dis[i]=0;
}
for (int i{1};i<=k;++i)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
if (getf(x)==getf(y+n)&&dis[x]-dis[y+n]!=z) {printf("No\n");return 0;
else merge(x,y+n,z);
}
printf("Yes\n");
return 0;
}
显然,这份代码维护
by qiuzx @ 2022-04-26 22:36:20
把所有