这这这为啥会RE啊
查看原帖
这这这为啥会RE啊
675572
syyyyhy楼主2022/3/31 16:55
//稳定婚姻
#include <bits/stdc++.h>
using namespace std;
#define N 10020

int n,m;
vector<int> g[N];
map<string,int> mapp;
int dfn[N];
int low[N];
int entry[N];
int belong[N];
int time2=1;
int cnt;
queue<int> que;
void dfs(int num)
{
	dfn[num]=time2;
	low[num]=time2;
	time2++;
	for(int to:g[num])
	{
		if(!dfn[to])
		{
			que.push(to);
			entry[to]=1;
			dfs(to);
			low[num]=min(low[num],low[to]);
		}
		else if(entry[to])
		{
			low[num]=min(low[num],low[to]);
		}
	}
	
	if(dfn[num]==low[num])
	{
		cnt++;
		while(que.front()!=num)
		{
			belong[que.front()]=cnt;
			entry[num]=0;
			que.pop();
		}	
		belong[que.front()]=cnt;
		entry[num]=0;
		que.pop();	
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		string gir,boy;
		cin>>gir>>boy;
		mapp[gir]=i;
		mapp[boy]=i+n;
		g[i].push_back(i+n);
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		string gir,boy;
		cin>>gir>>boy;
		int a=mapp[gir];
		int b=mapp[boy];
		g[b].push_back(a);
	}
	for(int i=1;i<=2*n;i++)
	{
		if(!dfn[i])
		{
			que.push(i);
			entry[i]=1;
			dfs(i);
		}
	}
	
	for(int i=1;i<=n;i++)
	{
		if(belong[i]==belong[i+n])
		{
			cout<<"Unsafe"<<endl;
		}
		else cout<<"Safe"<<endl;
	}
 } 
2022/3/31 16:55
加载中...