CF776D(并查集思想)
1.CF1656E(构造思想)2.P10178(构造思想)3.P10179(构造思想+实现)4.P3963 (平衡树思想)5.P10156(dp思想)6.P3939 (ds实现)
7.CF776D(并查集思想)
8.CF243A (拆位思想)9.ABC283E (dp思想)10.AT_joi2015ho_b (dp思想)11.P9588 (ds思想)12.CF482B (拆位思想+实现)13.U332154 carbon 题解(期望)14.U329011 trie pi 题解15.[ARC128D](计数dp)16.P1081 (倍增+代码实现技巧)17.CF1537D (博弈论+找规律)18.CF1557D (dx)(dp技巧)19.P3165/P2596(文艺平衡树套路)20.吉司机大杂烩21.ARC149C (构造)22.CF19D(树套树)23.网络流大杂烩24.U417376题解25.CF1748E(笛卡尔树)26.[CERC2019] Be Geeks!27.「Cfz Round 2」Binary28.CF1833G29.P1028230.CF1939C31.2024省选OIFC模拟T132.P140733.P10218 魔法手杖34.P165335.取模二题36.CF1699C37.ABC35238.P6627 [省选联考 2020 B 卷] 幸运数字39.P6619 [省选联考 2020 A/B 卷] 冰火战士40.2024PKUSC游记难度1
em还是一道比较套路的题目。观察发现,如果当时他的两把钥匙状态是相同的,当时他的两把钥匙状态是不同的,对于这种相同不同的问题可以考虑并差集,状态一样就一样的并在一起,否则就把不一样的并在一起
所以以后看见这些问题(a=b+k,a=!b,a=b)都可以用带权并查集,扩展域并查集等解决。最好所有优化都加上,不然不如dfs
#include<bits/stdc++.h>
using namespace std;
int n,m,k,x,a[100005],fa[200005],b[100005][2];
bool sta[100005];
int get(int x){
if(fa[x]!=x) return fa[x]=get(fa[x]);
return fa[x];
}
void merge(int x,int y){
int xi=get(x),yi=get(y);
if(xi!=yi){
fa[xi]=yi;
}
}
void print(){
for(int i=1;i<=2*m;i++){
cout<<get(i)<<" ";
}cout<<endl;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m*2;i++){
fa[i]=i;
}
for(int i=1;i<=n;i++){
cin>>sta[i];
}
for(int i=1;i<=m;i++){
cin>>k;
for(int j=1;j<=k;j++){
cin>>x;
if(b[x][0]==0) b[x][0]=i;
else b[x][1]=i;
}
}
for(int i=1;i<=n;i++){
if(sta[i]==0){
merge(b[i][0],b[i][1]+m);
merge(b[i][0]+m,b[i][1]);
}else{
merge(b[i][0],b[i][1]);
merge(b[i][0]+m,b[i][1]+m);
}
//print();
}
for(int i=1;i<=m;i++){
//cout<<get(i)<<" "<<get(i+m)<<endl;
if(get(i)==get(i+m)){
cout<<"NO"<<endl;
return 0;
}
}
cout<<"YES"<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~