网站模块数据同步,图片在线制作二维码,深圳网络营销收费标准,网站制作方案书题目描述
在一次聚会中#xff0c;每人拿着一张印有石头、剪刀、布的卡片#xff0c;每个人具体拿得是哪种卡片不得而知。
现在告诉你某些人之间的胜负关系#xff0c;并会询问某两个人之间的对战结果#xff0c;人按照从 11 到 n#xfffd; 编号。
对于每个…
题目描述
在一次聚会中每人拿着一张印有石头、剪刀、布的卡片每个人具体拿得是哪种卡片不得而知。
现在告诉你某些人之间的胜负关系并会询问某两个人之间的对战结果人按照从 11 到 n 编号。
对于每个询问请给出正确的回答 Win(胜)、Loss(负)、Tie(平)(胜)、(负)、(平) 输入
第一行输入两个整数 n,m(1≤n≤100003≤m≤10000),(1≤≤100003≤≤10000)分别代表人数和信息数量。
接下来 m 行每行三个整 a,b,ca∈[1,2], 1≤b,c≤n,,∈[1,2], 1≤,≤
当 a11 时代表新增一条已知信息表示 b, c, 对战中 b 胜当 a22 时代表根据以上信息询问 b,c, 对战中 b 的结果
如果出现某条新增的信息与之前的信息发生冲突就忽略此条信息。
输出
对于每个 a22 的操作输出 Win、Loss、Tie、、 或 Unknown 代表对战双方的结果。 样例输入
6 6
1 1 2
2 1 3
1 2 4
1 4 3
2 1 3
2 4 1
样例输出
Unknown
Tie
Win
#include iostream
#include vector
#include algorithm
using namespace std;
class WeightedUnionSet {
public :WeightedUnionSet(int n) : fa(n 1), val(n 1) {for (int i 0; i n; i) {fa[i] i;val[i] 0;}}int get(int x) {if (fa[x] x) return x;int root get(fa[x]);val[x] (val[x] val[fa[x]]) % 3;return fa[x] root;}void merge(int a, int b ,int t) {int aa get(a), bb get(b);if (aa bb) return;fa[aa] bb;val[aa] (t - val[a] val[b] 3) % 3;return;}vectorint fa, val;
};
int main() {int n, m;cin n m;WeightedUnionSet u(n);for (int i 0, a, b, c; i m; i) {cin a b c;if (a 1) {u.merge(b, c, 2);}else {if (u.get(b) ! u.get(c)) {cout Unknown endl;}else {switch ((u.val[b] - u.val[c] 3) % 3) {case 0: cout Tie endl; break;case 1: cout Loss endl; break;case 2: cout Win endl; break;}}}}return 0;
}