Codeforces 776D The Door Problem 【并查集】
2017-04-04 10:38
351 查看
题目链接:http://codeforces.com/contest/776/problem/D
题意:
有一些锁,初始状态为ri,其中ri为1表示unlock,为0表示lock,给出锁与锁之间的关系,即拉一下第i个锁,与第i个锁相连的其它锁都要改变一下状态,问有没有可能让所有的锁都变成unlock状态(即都为1)
题解:
并查集维护即可,使x表示执行了第x号命令,x+m表示不执行第x号命令,维护即可。
P.S:这题评测时间真心长,请大家耐心等待。
代码:
题意:
有一些锁,初始状态为ri,其中ri为1表示unlock,为0表示lock,给出锁与锁之间的关系,即拉一下第i个锁,与第i个锁相连的其它锁都要改变一下状态,问有没有可能让所有的锁都变成unlock状态(即都为1)
题解:
并查集维护即可,使x表示执行了第x号命令,x+m表示不执行第x号命令,维护即可。
P.S:这题评测时间真心长,请大家耐心等待。
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> using namespace std; typedef long long LL; const int inf = 1 << 26; vector<int> sav[200005]; int fath[400005], a[200005]; int find(int x) { if(fath[x] == x) return fath[x]; return fath[x] = find(fath[x]); } void merge(int x, int y) { int fx = find(x), fy = find(y); if(fx == fy) return ; fath[fy] = fx; } int main(){ int n, m; scanf("%d %d", &n, &m); for ( int i = 1; i <= n; i ++ ) scanf("%d", &a[i]); for ( int i = 1; i <= m; i ++ ) { int x; scanf("%d", &x); for ( int j = 0; j < x; j ++ ) { int y; scanf("%d", &y); sav[y].push_back(i); } } for ( int i = 0; i <= 400000; i ++ ) fath[i] = i; for ( int i = 1; i <= n; i ++ ) { int x = sav[i][0], y = sav[i][1]; if(a[i]) { merge(x, y); merge(x+m, y+m); } else { merge(x+m, y); merge(x, y+m); } } for ( int i = 1; i <= m; i ++ ) { if(find(i) == find(i+m)) { puts("NO"); return 0; } } puts("YES"); return 0; }
相关文章推荐
- codeforces 366D 并查集
- Codeforces 722C Destroying Array【逆序(离线)思维+并查集】
- CodeForces - 731C Socks(并查集)(贪心)
- CodeForces - 698B Fix a Tree(并查集)
- CodeForces 25D Roads not only in Berland【并查集】
- Codeforces 278C Learning Languages【并查集】水题
- CodeForces 698B - Fix a Tree(并查集)
- CodeForces 300B Coach (并查集)
- 【贪心+并查集】Codeforces 853A Planning
- codeforces 468B two set(并查集)
- CodeForces 209C Trails and Glades(欧拉回路判断+并查集计算联通分量)
- CodeForces 731 C.Socks(贪心+并查集)
- Codeforces 400D. Dima and Bacteria【并查集+最短路】
- CodeForces 744A Hongcow Builds A Nation (并查集)
- Codeforces 870E 并查集 解题报告
- CodeForces-722C Destroying Array 并查集 离线操作
- Codeforces 400 D.Dima and Bacteria(并查集+弗洛伊德)
- CodeForces 445B DZY Loves Chemistry (并查集)
- Codeforces 766D 并查集
- CodeForces 445B. DZY Loves Chemistry(并查集)