首页 > 其他分享 >Codeforces Round 874 G题解

Codeforces Round 874 G题解

时间:2023-08-12 18:23:28浏览次数:40  
标签:sizes int 题解 874 Codeforces long limit deg define

做不动那么多题了,来个G

G就是问你一棵树能切成多少个大小为3的链,想了半天,想过dp啥的,但是后来发现这个贪心就好了,可以证明贪心找不到的,其他方法也找不到

好久没复健了,这是第一次,感觉以后要多做题才可以

#include <bits/stdc++.h>

using namespace std;
constexpr int limit =  (4e5  + 5);//防止溢出
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3f3f3f
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-9
#define FASTIO  ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
#define pi(a, b) pair<a,b>
#define rep(i, a, b) for(ll i = a; i <= b ; ++i)
#define per(i, a, b) for(ll i = b ; i >= a  ; --i)
#define MOD 998244353
#define traverse(u) for(int i = head[u]; ~i ; i = edge[i].next)
#define FOPEN freopen("C:\\Users\\tiany\\CLionProjects\\akioi\\data.txt", "rt", stdin)
#define FOUT freopen("C:\\Users\\tiany\\CLionProjects\\akioi\\dabiao.txt", "wt", stdout)
typedef long long ll;
typedef unsigned long long ull;
char buf[1 << 23], *p1 = buf, *p2 = buf, obuf[1 << 23], *O = obuf;
inline ll read() {
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
    ll sign = 1, x = 0;
    char s = getchar();
    while (s > '9' || s < '0') {
        if (s == '-')sign = -1;
        s = getchar();
    }
    while (s >= '0' && s <= '9') {
        x = (x << 3) + (x << 1) + s - '0';
        s = getchar();
    }
    return x * sign;
#undef getchar
}//快读
void print(ll x) {
    if (x / 10) print(x / 10);
    *O++ = x % 10 + '0';
}

void write(ll x, char c = 't') {
    if (x < 0)putchar('-'), x = -x;
    print(x);
    if (!isalpha(c))*O++ = c;
    fwrite(obuf, O - obuf, 1, stdout);
    O = obuf;
}
int n,m;
int a[limit];
vector<int>g[limit];
int sizes[limit];
int deg[limit];
void solve() {
    cin>>n;
    map<pi(int, int), int>mp;
    rep(i,1,n)g[i].clear(),sizes[i] = 0, deg[i] = 0;
    rep(i,1,n - 1){
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);
        g[y].push_back(x);
        mp[{x, y}] = i;
        mp[{y, x}] = i;
        deg[x]++,deg[y]++;
    }
    if(n <= 2){
        cout<<-1<<endl;
        return;
    }
    vector<int>ans;
    int ok = 1;
    function<void(int, int)> dfs = [&](int u, int fa){
        if(!ok)return;
        sizes[u] = 1;
        for(auto && v : g[u]){
            if(v == fa)continue;
            dfs(v, u);
            sizes[u] += sizes[v];
        }
        if(sizes[u] == 3){
            sizes[u] = 0;// clear all cut
            ans.push_back(mp[{fa, u}]);
        }else if(sizes[u] > 3){
            ok = 0;
            return;
        }
    };
    dfs(1, -1);
    if(sizes[1] != 0){
        cout<<-1<<endl;
        return;
    }
    if(ok){
        string oss;
        int num = 0;
        for(auto && it : ans | std::views::filter([](auto const x) -> bool{return x != 0;})){
            oss += to_string(it) + " ";
            ++num;
        }
        oss = to_string(num) + "\n" + oss;
        cout<<oss<<endl;
    }else{
        cout<<-1<<endl;
    }

}
int32_t main() {
#ifdef LOCAL
    FOPEN;
//    FOUT;
#endif
    FASTIO
    int kase;
    cin>>kase;
    while (kase--)
    invoke(solve);
    cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << "s";
    return 0;
}

标签:sizes,int,题解,874,Codeforces,long,limit,deg,define
From: https://www.cnblogs.com/tiany7/p/17625208.html

相关文章

  • 国标GB28181视频平台LntonGBS(源码版)国标视频云服务平台主子码流都为H.265时,切换出现花
    国标视频云服务LntonGBS平台是基于国标GB28181协议的平台,可实现的视频能力有:实时直播、视频录像、语音对讲、云存储、检索及回放、告警、级联等。平台支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。最近有用户反馈,在LntonGBS平台......
  • RTSP流媒体服务器LntonNVR(源码版)安防监控平台开启录像后,录像回看无数据的问题解决方案
    LntonNVR平台通过RTSP/ONVIF协议实现了优秀的视频能力。它可以采集前端接入设备的音视频资源,并将其转码成适用于全平台、全终端分发的视频流格式,包括RTMP、FLV、HLS、WebRTC等格式。这使得LntonNVR平台具备了视频监控直播、云端录像、检索与回看、告警等安防监控功能。平台部署轻快......
  • P7438 更简单的排列计数 题解
    前置芝士:伯努利数等幂求和。其中伯努利数\(B_i\)的生成函数为\(\frac{x}{e^x-1}\)。首先这种逆序对有个套路的dp:令\(f_{i,j}\)表示填了前\(i\)个数,逆序对为\(j\),这时排列的\(val_{\pi}\)的乘积之和。有转移:\(f_{i,j}=\sum\limits_{k=0}^{i-1}f_{i-1,j-k}i^k\),初始......
  • P7092 计数题 题解
    前置题目:P5748集合划分计数。我们令\(Bell_n\)表示将\(n\)个有标号的球划分为若干集合的方案数。且\(Bell_n=n![x^n]e^{e^x-1}\)。首先,当\(k=0\)时,\(\mu(S)=0\),答案为\(0\)。当\(k=1\)时,\(\mu(S)=(-1)^{|S|},\varphi(S)=\prod\limits_{x\inS}(x-1)\)。记\(\pi(S)......
  • [ABC309G] - Ban Permutation 题解
    [ABC309G]-BanPermutation题解题目描述求长为\(N(N\leq100)\)且满足以下条件的排列\(P=(P_1,P_2,...,P_N)\)的个数,模\(998244353\):\(\forall1\leqi\leqN\),\(|P_i-i|\geqX(X\leq5)\)。思路首先拆绝对值,得到:\[P_i\geX+i\veeP_i\leX-i\]数数题除了排列......
  • Codeforces Round 799 (Div. 4)(vp)
    CodeforcesRound799(Div.4)AMarathonvoidsolve(){vector<int>a(4);intgoal;cin>>goal;intans=0;for(inti=0;i<3;i++){intx;cin>>x;if(goal<x)ans++;}co......
  • Codeforces 1854E - Game Bundles
    都这么会乱搞的吗/xia随机生成若干\(<30\)的数直到它们当中和为\(60\)的子集个数\(>k\)为止。删去最后一个元素。然后考虑贪心确定\(>30\)的部分,具体方法是按照\(dp_{60-x}\)从大到小贪心选,如果剩余子集个数\(\gedp_{60-x}\)就在序列中加入\(x\)。如此随机化直到找......
  • CodeForces 1610F Mashtali: a Space Oddysey
    洛谷传送门CF传送门比较有启发性的题。首先,设\(a_u\)为与点\(u\)相连的边权和,答案的上界显然是\(\sum\limits_{i=1}^n[a_u\bmod2=1]\)。之后我们把P7816「Stoi2029」以父之名第一篇题解的做法搬过来,也就是:建一个虚点向原图度数为奇数的点连边权为\(1\)的边......
  • 洛谷-P9496 题解
    正文在讲解之前,先来几种简单情况:让\(n=1\)转变成\(m=0\),只需要让\(n\land0\)即可;让\(n=0\)转变成\(m=1\),只需要让\(n\lor1\)即可。将\(n\)扩展成更大的。对于\(n\)二进制的每一位数,只需要按上述情况处理即可,而由于可以对任意数进行位运算,所以相同类型的位运......
  • 【题解】Educational Codeforces Round 147(CF1821)
    自己做出来了A-E,F算是搞懂GF后第一道符合我这个菜鸡水平的实战,可惜的是根本没意识到可以GF。A.Matching题目描述:整数模板是每位均为数字或问号的字符串。如果可以用数字替换模板中的每个问号,从而获得该正整数(严格大于\(0\))的十进制表示形式,且不带任何前导零,则该正整数......