攜程程式設計大賽 (預賽第二場)第一題 剪刀石頭布

2022-08-25 21:42:28 字數 1398 閱讀 9233

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之間的節點的權值 這裡的深度依然從整個樹的根節點...