[CodeForces]981C Useful Decomposition

李煜东dalao今天给我们讲课了QwQ
ppt上一道题
英文题说一下题意吧,以后又看不懂了
将一棵树分割成多个简单路径,每个边只能在一条路径上,但至少有一个公共节点。
输出简单路径分割方法/No
由题易知,如果图不是一个菊花图的话,想搞成题意的样子至少要有环或者有的路径共用。
想到这儿代码搞一搞就行了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int N=1e5;
vector<int>s;
int n,ecnt,head[N],mx=0,ct;
struct Edge{
	int to,nxt,val;
}e[N<<1];
int du[N];
void add(int bg,int ed) {
	e[++ecnt].nxt=head[bg];e[ecnt].to=ed;head[bg]=ecnt;
}
int main() {
	scanf("%d",&n);
	int cnt=0;
	for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),add(u,v),add(v,u),du[u]++,du[v]++;
	for(int i=1;i<=n;i++) {
		if(mx<du[i]) mx=du[i],ct=i;
		if(du[i]>2 ) cnt++;
		else if(du[i]==1)s.push_back(i);
		if(cnt>1) {printf("No");return 0;}
	}
	puts("Yes");
	if(!cnt) {
		puts("1");
		printf("%d %d",s[0],s[1]);return 0;
	}
	printf("%d
",s.size());
	for(int i=0;i<s.size();i++) printf("%d %d
",ct,s[i]);
}
我是咸鱼。转载博客请征得博主同意Orz
原文地址:https://www.cnblogs.com/sdfzhsz/p/9275293.html