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;
}