WA*10
查看原帖
WA*10
549499
Disjoint_cat楼主2024/5/23 16:24

跟题解写的很像啊,为啥 WA 了。。。

而且好像 Yes 和 No 都有挂掉的。。。

玄关

// Author: Minghan Ye
// Name: D - Substring Comparison
// URL: https://atcoder.jp/contests/arc165/tasks/arc165_d
// ML: 1024MB
// TL: 2000ms
// Time: 24/05/22 21:31

#include<bits/stdc++.h>
using namespace std;
#ifdef DEBUG
#include "E:/OI/normal/templates/debug.h"
#else
#define dbg(...) (void)0
#define msg(...) (void)0
#endif
#define ll long long
#define endl '\n'
#define PB emplace_back
#define PPB pop_back
#define MP make_pair
#define ALL(Name) Name.begin(),Name.end()
#define PII pair<int,int>
#define VI vector<int>
#define GI greater<int>
#define fi first
#define se second

const int N=2005;
int n,m,a[N],b[N],c[N],d[N],pos[N];
struct E
{
	int v,id;
	E(int v,int x):v(v),id(x){}
};
vector<E>g[N];
int fa[N],dfn[N],df,low[N],bel[N];
VI stk;
vector<VI>scc;
void tarjan(int x)
{
	low[x]=dfn[x]=++df;
	stk.PB(x);
	for(auto e:g[x])
	{
		int y=e.v;
		if(!dfn[y])tarjan(y),low[x]=min(low[x],low[y]);
		else if(!bel[y])low[x]=min(low[y],dfn[y]);
	}
	if(low[x]==dfn[x])
	{
		int cnt=scc.size();
		scc.PB();
		int u;
		do
		{
			u=stk.back();
			stk.pop_back();
			scc.back().PB(u),bel[u]=cnt;
		}while(u!=x);
	}
}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}

int main()
{
	ios::sync_with_stdio(false),cin.tie(nullptr);
//	int _;cin>>_;while(_--)

	cin>>n>>m;
	for(int i=1;i<=m;i++)cin>>a[i]>>b[i]>>c[i]>>d[i];
	iota(fa+1,fa+n+1,1);
	bool ok=1;
	while(ok)
	{
		ok=0;
		fill(g+1,g+n+1,vector<E>());
		for(int i=1;i<=m;i++)
		{
			if(c[i]+pos[i]>d[i])return puts("No"),0;
			if(a[i]+pos[i]<=b[i])g[find(a[i]+pos[i])].PB(find(c[i]+pos[i]),i);
		}
		df=0;
		scc.clear(),scc.PB();
		fill(dfn+1,dfn+n+1,0),fill(low+1,low+n+1,0),fill(bel+1,bel+n+1,0);
		for(int i=1;i<=n;i++)
			if(!dfn[i]&&fa[i]==i)tarjan(i);
		for(VI i:scc)
		{
			for(int j:i)fa[find(j)]=find(i[0]);
			for(int j:i)
				for(auto e:g[j])if(bel[e.v]==bel[j])pos[e.id]++,ok=1;
		}
	}
	puts("Yes");

	return 0;
}
2024/5/23 16:24
加载中...