RE 0分球调
查看原帖
RE 0分球调
664034
_xxxxx_楼主2024/3/20 17:03

rt,第一个数据下载下来没有问题。

错误信息是 Runtime Error. Received signal 11: Segmentation fault with invalid memory reference.。

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int M  = 2e7 + 10;
const int N = 2e7 + 10;
int head[M], to[M], ne[M], id;
int add(int x, int y)
{
	to[++id] = y;
	ne[id]  = head[x];
	head[x] = id;
}
int n, m;
map<string, int> mp;
int dfn[N], low[N], dn;
int sta[N], top;
int idx[N],k;
bool vis[N];
void tarjan(int u)
{
	vis[u] = 1;
	dfn[u] = low[u] = ++dn;
	sta[++top] =u;
	for(int i = head[u]; i; i = ne[i])
	{
		int v = to[i];
		if(!dfn[v])
		{
			tarjan(v);
			low[u] = min(low[u], low[v]);
		}
		else if(vis[v]) low[u] = min(low[u], dfn[v]);
	}
	if(low[u] == dfn[u])
	{
		++k;
		while(sta[top +1] != u)
		{
			int now = sta[top];
			top--;
			vis[now] = 0;
			idx[now] = k;
		}
	}
}
string a, b;
signed main()
{
	cin >> n;
//	cout <<"idjof\n";
	for(int i = 1; i <= n; i++)
	{
		cin >>a >>b;
		mp[a] = i, mp[b] = i +n;
		add(i, i +n);
	}
	cin >> m;
//	cout <<"idjof\n";
	for(int i = 1; i <= m; i++)
	{
		cin >>a >> b;
//		cout <<mp[b] << " " << mp[a] <<endl;
		add(mp[b], mp[a]);
	}
//	cout <<"idjof\n";
	for(int i = 1; i <= n *2; i++)
	{
		if(!dfn[i])
		{
			tarjan(i);
		}
	}
	for(int i = 1; i<= n; i++)
	{
		if(idx[i] == idx[i + n]) cout << "Unsafe\n";
		else cout << "Safe\n";
	}
	return 0;
}

2024/3/20 17:03
加载中...