首页 > 其他分享 >Codeforces Round #764 (Div. 3) G

Codeforces Round #764 (Div. 3) G

时间:2022-11-04 20:47:32浏览次数:101  
标签:back int Codeforces 764 check ans Div find

G. MinOr Tree

看到或运算 我们思考如何按位来做
我们可以贪心的 从高位到低位的 要是该位可以都用0的来构成一颗生成树 我们显然是很高兴的
但是怎么check?
我们每次遍历一次边 要是满足要求:
1.该位是0
2.不是处于同一个连通块
这样子写出来 发现过不了第三个样例
我们发现还有第三个要求就是:
3.当前边权w不能有我们前面已经确定了是0的位上w是1 这样显然悖论了
所以我们还要一个条件就是ans|w == ans

int n,m,p[N],ans;
vector<pair<int,int>>g[N];
int find(int x){
    if(p[x]!=x)p[x]=find(p[x]);
    return p[x];
}
void merge(int x, int y){
    p[find(x)] = find(y);
}
bool check(int x){
    for(int i=1;i<=n;i++)p[i]=i;
    for(int i=1;i<=n;i++)
        for(auto [v,w]:g[i])
            if((w>>x&1)==0&&find(i)!=find(v)&&(w|ans)==ans)
                merge(i,v);
    for(int i=1;i<=n;i++)if(find(1)!=find(i))return false;
    return true;
}
void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)g[i].clear(),p[i]=i;
    for(int i=1;i<=m;i++){
        int u,v,w;cin>>u>>v>>w;
        g[u].push_back({v,w});
        g[v].push_back({u,w});
    }
    ans=2147483647;
    for(int i=30;i>=0;i--)
        if(check(i))ans-=(1<<i);
    cout<<ans<<endl;
}

标签:back,int,Codeforces,764,check,ans,Div,find
From: https://www.cnblogs.com/ycllz/p/16859037.html

相关文章

  • CodeForces - 914C Travelling Salesman and Special Numbers
    题意:给出一个二进制数a,每次操作将当前数变成其二进制下1的个数,若干次操作后可以将其变为1.给定k,求不大于a的数中,经过k次操作能变成1的数的数量。解:观察一下这个操作,可以求......
  • Codeforces Round #776 (Div. 3) E
    E.ReschedulingtheExam显然我们能想到的每次操作都是先将最小的取出来操作要是我们有两个数都是最小的我们只有相邻的时候才能操作要是大于两个那我们就不管怎么操......
  • Codeforces Round #778 (Div. 1 + Div. 2, based on Technocup 2022 Final Round) F M
    A-E都还是比较简单的。首先,容易想到的,异或上\(2^k\),相当于以\(2^{k+1}\)的长度分块,然后每一块对半切,然后交换左右部分。我的想法是由于这个交换的性质,也许我们可以尝......
  • Codeforces Round #766 (Div. 2)
    CodeforcesRound#766(Div.2)\(\color{Green}{★}\)表示赛时做出。\(\color{Yellow}{★}\)表示赛后已补。\(\color{Red}{★}\)表示\(\text{To\be\solved}\)......
  • Codeforces Round #820 (Div. 3) F
    F.KireiandtheLinearFunction首先我们知道的是给定长度w都是%9意义下的所以我们枚举四个位置的数就是9^4预处理出来答案这里我们要去w长度的串%9但是w的位数过......
  • Codeforces Global Round 20 D F1 F2/more
    https://codeforc.es/contest/1672F1https://www.luogu.com.cn/blog/AlexWei/solution-cf1672f1将置换分解为若干轮换(环),悲伤值越大\(\Rightarrow\)环越少(设环为\(k......
  • Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2) D
    D.ExplorerSpace我们考虑一个性质就是他最多就是找到一条k/2的最短路径然后回来这样是肯定是包含最优解的这个观察第二个样例我们将其改变一下要是我们一半的长度......
  • CodeForces 1540B Tree Array
    CF传送门洛谷传送门很强的一个题。发现根的选择很重要,于是考虑先枚举根。考虑枚举两个点对\(i,j\(i<j)\),如果\(j\)比\(i\)先被标记,那么\(i,j\)就贡献了一个逆......
  • CodeForces - 204A Little Elephant and Interval
    题意:给定区间[l,r],问区间内有多少第一个数字和末尾数字一样的数。解:练习一些数位dp。先从高到低dp[pos][fir]表示dp到第pos个位置,以fir开头的串的数量,其中fir不为0。这道......
  • Manthan, Codefest 18 (rated, Div. 1 + Div. 2) (E,F,G)
    LinkEm次操作,每次加边后询问最大旅行团。旅行团的定义:旅行团中的每个人都至少有k个邻接点在团里。显然会肯定很想全选,但是有的人压根没有k个邻接点,只能直接删掉,然后一......