1 条题解

  • 0
    @ 2025-8-24 22:50:05

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Defy_HeavenS
    世界上有两种程序员,一种是下标以0开始的,一种是下标以1开始的,我是第一种,请问我是下标为几的程序员

    搬运于2025-08-24 22:50:05,当前版本为作者最后更新于2023-09-09 14:18:31,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意

    给你一个由若干个环相扣而成的链条,如果想让这个链条变成直链,至少要解开几个环。

    直链是指每个环最多和其他两个环相扣的链,如:

    思路

    求这个链解开多少个环可以解成若干条直链,就是在求这个链有多少个环连了大于 22 个其他环,只要把这些连接数量大于 22 的解开就是若干条直链。

    比如一个环和 33 个环相扣,就要解开 11 个。

    那么怎么求有几个连接数量大于 22 的环呢?

    我们看题,在直链中,每个环最多连接两个其他环,那么把链想象成无向图就是每个顶点的度不能大于 22,如果大于 22 就要断开其他的顶点。

    还是上面那个例子,最大的环的度是 33,就要断开 323-2 个环。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,u,v,s;
    int d[300005];
    int main(){
    	cin>>n;
    	for(int i=1;i<n;i++){
    		cin>>u>>v;
    		d[u]++,d[v]++;
    	}
    	for(int i=1;i<=n;i++){
    		if(d[i]>2){
    			s+=max(0,d[i]-2);
    		}
    	}
    	cout<<s;
    	return 0;
    }
    
    • 1

    信息

    ID
    8865
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者