社区讨论
只 AC#1 求助
P10778BZOJ3569 DZY Loves Chinese II参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mjdz0okw
- 此快照首次捕获于
- 2025/12/20 15:22 2 个月前
- 此快照最后确认于
- 2025/12/20 15:22 2 个月前
rt,直接把 P5227 的代码改了改。
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define FOR(i,a,b) for(int i=(a),E##i=(b);i<=E##i;i++)
#define REV(i,a,b) for(int i=(a),E##i=(b);i>=E##i;i--)
#define CLOSE_TIE ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define psbk push_back
#define endl '\n'
template <typename T>
void _outval(string s,int p,const T &t) {cout<<s.substr(p,s.length()-p)<<'='<<t<<endl; }
template <typename T, typename... Args>
void _outval(string s,int p,const T &t,const Args &...rest){
string n="";
while(s[p]!=',') n+=s[p++];
cout<<n<<'='<<t<<", ";
_outval(s,p+1,rest...);
}
#define outval(...) _outval(#__VA_ARGS__,0,__VA_ARGS__)
#define outarr(a,be,ed)\
{cout<<(#a)<<": ";\
FOR(iiii,be,ed)cout<<'['<<iiii<<"]="<<a[iiii]<<(iiii<ed?", ":"\n");}
mt19937_64 rnd(time(0));
const int N=1e5+5;
int n,m,q,f[N],cnt;
ull w[N*5],d[N];
struct Edge{int v,id;};
struct Base{
ull b[65];
void init(){memset(b,0,sizeof b);}
bool insert(ull x){
REV(i,63,0){
if(!(x&(1ull<<i))) continue;
if(!b[i]) return b[i]=x,0;
x^=b[i];
}
return 1;
}
}b;
vector<Edge> e[N];
int find(int p){return f[p]==p?p:f[p]=find(f[p]);}
void dfs(int u,int lst){
for(Edge ed:e[u]){
int v=ed.v,id=ed.id;
if(id==lst) continue;
dfs(v,id);
d[u]^=d[v];
}
w[lst]=d[u];
}
int main(){
CLOSE_TIE
cin>>n>>m;
FOR(i,1,n) f[i]=i;
FOR(i,1,m){
int u,v; cin>>u>>v;
if(find(u)==find(v)) w[i]=rnd(),d[u]^=w[i],d[v]^=w[i];
else e[u].psbk({v,i}),e[v].psbk({u,i}),f[find(u)]=find(v);
}
dfs(1,0);
cin>>q;
while(q--){
int k; cin>>k;
bool ans=1; b.init();
FOR(i,1,k){
int x; cin>>x; x^=cnt;
if(b.insert(w[x])){ans=0; break;}
}
cnt+=ans;
cout<<(ans?"Connected\n":"Disconnected\n");
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...