wa on #3 #4 #7 #8 求调
查看原帖
wa on #3 #4 #7 #8 求调
562569
kingho11楼主2024/12/18 13:21
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,a,b,rt=1,dfn[N],low[N],st[N],tp,t,tot,col[N],ans=1000000000;
bool iscut[N],inst[N];
vector <int> v[N];
void tarjan(int u,int fa)
{
//	cout<<u<<" "<<fa<<"\n"; 
	dfn[u]=low[u]=++t;
	st[++tp]=u;
	inst[u]=1;
	int child=0;
	for(int i=0;i<v[u].size();i++)
	{
		int v2=v[u][i];
		if(!dfn[v2])
		{
			child++;
			tarjan(v2,u);
			low[u]=min(low[u],low[v2]);
			if(u!=rt && low[v2]>=dfn[u])
			{
				if(u!=a && u!=b && ((dfn[a]>=dfn[i] && dfn[i]>=dfn[b]) || (dfn[b]>=dfn[i] && dfn[i]>=dfn[a]) || (dfn[v2]<=dfn[a] && dfn[v2]>dfn[b]) || (dfn[v2]<=dfn[b] && dfn[v2]>dfn[a])))
				{
					ans=min(ans,u); 
				}
			}
			else if(u==rt)
			{
				child++;
				if(child>1)
				{
					if(u!=a && u!=b && ((dfn[a]>=dfn[i] && dfn[i]>=dfn[b]) || (dfn[b]>=dfn[i] && dfn[i]>=dfn[a]) || (dfn[v2]<=dfn[a] && dfn[v2]>dfn[b]) || (dfn[v2]<=dfn[b] && dfn[v2]>dfn[a])))
					{
						ans=min(ans,u); 
					}
				}
			}
		}else if(inst[v2] && v2!=fa) low[u]=min(low[u],dfn[v2]);
	}
}
int main()
{
	cin>>n;
	int u,v2;
	cin>>u>>v2;
	while(u!=0 && v2!=0)
	{
		v[u].push_back(v2);
		v[v2].push_back(u);
		cin>>u>>v2;
	}
	cin>>a>>b;
	for(int i=1;i<=n;i++)
	{
		if(!dfn[i]) tarjan(i,0);
	}
	if(ans==1000000000) cout<<"No solution";
	else cout<<ans;
}
2024/12/18 13:21
加载中...