problem description
現有m個人一起玩剪刀石頭布,以1-m編號,每人出一種,出過不再改變,但是我們並不知道它到底是哪一種。 (其中石頭贏剪刀,剪刀贏布,布贏石頭,一樣則平)
裁判用兩種說法對這m個人所構成的輸贏關係進行描述:
一:"1 a b",表示第a個人和第b個人出的一樣。
二:"2 a b",表示第a個人贏第b個人。
裁判對m個人,用以上兩種說法,連說n句話,其中有真的、也有假的。
一句話出現以下情況,就是假話,否則就是真話。
1) 該句話與之前的某些真話衝突;
2) 該句話中a或b比m大;
3) 該句話表示a贏a。
請根據給定的m和n,輸出假話數。
其中(1 <= m <= 10,000),(0 <= n <= 10,000)
input
第1行是乙個自然數k,代表有k組資料。
每組資料以乙個空行分隔,其中每組資料的第1行是兩個自然數m、n,以空格分開。
每組資料的第2行至n+1行,每行是三個自然數x,a,b,三個數之間用空格分開,x(1或2)表示說法的種類。
output
每組資料對應一行,每行有乙個整數,代表假話數。
343 11
1 4 3
2 3 3
1 4 1
1 4 4
2 3 3
1 2 2
2 1 4
1 1 1
2 1 4
2 3 4
2 3 2
66 9
2 3 1
2 4 4
2 1 2
2 4 3
2 4 2
2 2 3
1 3 2
1 2 1
1 1 1
6 7
2 3 7
2 1 2
2 4 4
1 2 1
1 3 2
1 2 3
2 1 3
sample output
5 4 3
分析:經典並查集
#include #includeusing namespace std;const int max_n = 50010;
int set[max_n];
int r[max_n];
void init(int n)
}int cha(int x)
void unite(int x, int y, int type)
int main()
if (cha(x) == cha(y))
}else
}printf("%d\n", ans);
}}
攜程程式設計大賽 (預賽第二場)
a 和食物鏈做法一樣,帶權並查集 b dp,01揹包背出所有能組成邊情況,在用這些情況去計算面積保留最大值 c 每個點從後往前搜,搜到合適就輸出,搜不到就輸出255 255 255 d 博弈,如果成對成對出現後手勝,否則先手勝 a include include const int n 10005 ...
2017多校第二場最後一題
給n個點,問在座標系上能組成多少個正多邊形。因為n是整數,所以只能是組成正方形,所以題目就變成了求圖中的n個點能夠組成多少個正方形。列舉兩個頂點,判斷剩下的兩個點是否存在。第乙個計算幾何題,就是暴力 從來沒寫過數學題,比賽的時候 隊友沒看的n是整數也一直寫不出。一下午真是。好菜啊 include i...
2014程式設計之美初賽第一場第二題
時間限制 4000ms 單點時限 2000ms 記憶體限制 256mb 有乙個n個節點的樹,其中點1是根。初始點權值都是0。乙個節點的深度定義為其父節點的深度 1,特別的,根節點的深度定義為1。現在需要支援一系列以下操作 給節點u的子樹中,深度在l和r之間的節點的權值 這裡的深度依然從整個樹的根節點...