社区讨论

只 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 条回复,欢迎继续交流。

正在加载回复...