PAT L2-010. 排座位
原题链接
简单
作者:
青丝蛊
,
2021-04-13 14:56:54
,
所有人可见
,
阅读 342
#include <bits/stdc++.h>
using namespace std;
int p[110];
map<int, set<int>> mp; // 某个人的敌对关系
int n, m, k;
int find(int x)
{
return x == p[x] ? x : find(p[x]);
}
void Union(int x, int y)
{
x = find(x), y = find(y);
if (x != y) p[y] = x;
}
int main()
{
cin >> n >> m >> k;
iota(p, p + n + 1, 0);
while (m--)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (c == 1) Union(a, b);
else
{
mp[a].insert(b);
mp[b].insert(a);
}
}
while (k--)
{
int a, b;
cin >> a >> b;
bool f1 = mp[a].count(b) && mp[b].count(a);
bool f2 = find(a) == find(b);
if (f2 && f1) puts("OK but...");
else if (!f1 && f2) puts("No problem");
else if (!f1 && !f2) puts("OK");
else puts("No way");
}
return 0;
}