首页 > 其他分享 >Codeforces Round #819 D

Codeforces Round #819 D

时间:2022-09-19 18:45:45浏览次数:55  
标签:const int Codeforces 819 出边 Round define

D. Edge Split

n+2条边 并且连通图 就证明最多多3条边
我们可以想到的是要是连成了环的话 不如拆一条边给其他颜色 所以我们一定要无环
我们先跑一遍最小生成树确定成红色 要是m=n+2 才有可能多三条构成环
那我们考虑将他其中一条边变红 这样红色必然会出现环
我们考虑将刚刚变红的一个端点的另一条红色变蓝试试 但其实是不合规的
因为该点出边可能有4 这样就算减去2 还是可能构成环 我们试着直接把他所有出边(除了刚刚变红的)全变蓝色 这样就只有一条出边
我们的环就不复存在了

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"Yes"<<endl;
#define NO cout<<"No"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int p[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);
}
struct node{
    int u,v,id;
};
void solve() {
    int n,m;cin>>n>>m;
    for(int i=0;i<=n;i++)p[i]=i;
    vector<int>g[n+1];
    vector<node>e(m+1);
    for(int i=1;i<=m;i++){
        cin>>e[i].u>>e[i].v;e[i].id=i;
        auto [u,v,id]=e[i];
        g[u].push_back(v);
        g[v].push_back(u);
    }
    set<int>s;
    vector<int>ans(m+1);
    vector<node>B,R;
    for(int i=1;i<=m;i++){
        auto [u,v,id]=e[i];
        if(find(u)!=find(v)){
            merge(u,v);
            R.push_back(e[i]);
            ans[i]=1;
        }else{
            B.push_back(e[i]);
            s.insert(u),s.insert(v);
        }
    }
    if(s.size()==3&&B.size()==3){
        auto ed=B.back();
        ans[ed.id]=1;
        for(auto r:R){
            if(r.u==ed.u||r.v==ed.u)ans[r.id]=0;
        }
    }
    for(int i=1;i<=m;i++)cout<<ans[i];cout<<endl;
}
signed main(){
    fast
    int T;cin>>T;
    while(T--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:const,int,Codeforces,819,出边,Round,define
From: https://www.cnblogs.com/ycllz/p/16708646.html

相关文章

  • Codeforces Round #316 (Div. 2) D Tree Requests
    TreeRequests判断\(V_i\)的子树中,深度为\(h_i\)的结点上所带有的字符,能否组成一个回文串启发式合并维护所有深度上不同字符的数量,并且维护其奇数字符出现的次数如......
  • Codeforces Round #221 (Div. 1) D Tree and Queries
    TreeandQueries询问\(V_j\)的子树中,有多少种颜色出现了\(K_j\)次启发式合并最直接的,树上启发式合并的同时维护颜色出现的次数,然后再拿一个数组记录一下出现了\(i......
  • Codeforces Round #151 (Div. 2) E Blood Cousins Return
    BloodCousinsReturn启发式合并在跑启发式合并的同时,对每个深度都维护一个\(set\),就可以自动去重并计算有多少种不同的字符串#include<iostream>#include<cstdio>......
  • CF1352A - Sum of Round Numbers
    CF1352A-SumofRoundNumbersA.SumofRoundNumbersApositive(strictlygreaterthanzero)integeriscalledroundifitisoftheformd00...0.Inotherw......
  • Codeforces Round #816 (Div. 2) A-D
    CodeforcesRound#816(Div.2)A-D传送门A题意:长为n,m的一个棋盘,左上的旗子要去右下,左下的棋子要去右上,每次移动花费为1,但当一个棋子在另一个棋子的轨迹上时,可以花费......
  • Codeforces Round #819 (Div. 1 + Div. 2) A-D
    CodeforcesRound#819(Div.1+Div.2)A-D传送门过程本场A小磕一下,浪费了一点时间,随后B的迷惑题面浪费大量时间,心态发生了变化,不过最后还是在强猜后蒙过了,C又浪费了......
  • Codeforces Round #819 (Div. 1 + Div. 2) 补题 C
    C.Jatayu'sBalancedBracketSequence(思维题)题意:给你一个平衡括号序列(符合书写规则),其任意子区间[i,j]如果是平衡子序列,就建立一条i,j之间的无权无向边,求最后建成的图......
  • Codeforces Round #819 (Div. 1 + Div. 2)
    \(\texttt{Unrated}\)好像是印度老哥又一次放了F原题,悲。A考虑保留头尾的数,\(3\)种情况的分讨,即保留\(a_1\),保留\(a_n\),或者都保留。MyCode#include<bits/stdc+......
  • Codeforces Round #816 (Div. 2)
    Preface早上7:20起来早自习,结果不知道背什么遂刷了好久知乎……下午只有一个思修课,一边划水一遍写题,堪堪做了ABCD晚上据说有C语言的程序设计?又可以摸鱼了好耶A.Crossm......
  • Educational Codeforces Round 40 (Rated for Div. 2) 补题
    E.WaterTaps题意:每个水龙头有一个流量限制\(a_i\),温度\(t_i\),现在让你控制每个水龙头的出水量\(x_i\),使得最终的水温为\(T\),水温的公式为$\frac{\sum\limits_{i=1}^{......