某场CF Div2 Peaceful Rooks
题目链接:Peaceful Rooks
题目大意:
有一个n*n的棋盘,上面有m个棋子,并且初始位置各个棋子不会互相攻击到(类似于8皇后),问最少移动多少步。
思路:
首先,这个题转化为建图:
为什么建图:

建图可以用dsu(并查集),判环

参考代码
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define N 200010 4 int f[N]; 5 int get(int x) { 6 return f[x] == x?f[x]:(f[x] = get(f[x])); 7 } 8 int main() { 9 int t,m,n; 10 cin >> t; 11 while(t--) { 12 int ans = 0; 13 cin >> n>> m; 14 for(int i = 1; i <= n; i++) f[i] = i; 15 for(int i = 0; i < m; i++) { 16 int x,y; 17 cin >> x >> y; 18 if(x == y) continue; 19 x = get(x); y = get(y); 20 if(x != y) { 21 ans++; 22 f[y] = x; 23 } else ans += 2; 24 } 25 cout << ans << endl; 26 } 27 return 0; 28 }

浙公网安备 33010602011771号