关于T1思路
  • 板块学术版
  • 楼主Xiphi
  • 当前回复12
  • 已保存回复12
  • 发布时间2023/5/1 18:14
  • 上次更新2023/10/23 17:00:33
查看原帖
关于T1思路
667250
Xiphi楼主2023/5/1 18:14

我的思路是记录dfs序之后,从前往后考虑,当找到一个第一次出现的点时,输出i-1, 这里我特判了一下,如果前面出现两个及以上的“1”,那么输出i-2,不知道哪里假了。

这里i又加了1是因为是从零开始的

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<string>
#include<cmath>
#include<cstring>
#include<set>
#include<map>
using namespace std;
int n;
vector<int> Adj[100005],xu;
void dfs(int x,int fa){
	for(int i=0;i<Adj[x].size();++i){
		if(Adj[x][i]!=fa){
			xu.push_back(Adj[x][i]);
			dfs(Adj[x][i],x);
			xu.push_back(x);
		}
	}

}
int main(){
//	freopen("test.in","r",stdin);
//	freopen("test.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
	cin>>n;
	for(int i=1,u,v;i<n;++i){
		cin>>u>>v;
		Adj[u].push_back(v);
		Adj[v].push_back(u);
	}
	xu.push_back(1);
	dfs(1,0);
	int cnt=1,ans;
	set<int> s;
	xu.pop_back();
	for(int i=0;i<xu.size();++i){
		if(xu[i]==1&&i!=0&&cnt<2){
			cnt=2;
		}
		if(s.count(xu[i])==0) s.insert(xu[i]),cout<<i-cnt+1<<'\n';
	}
	return 0;
}





2023/5/1 18:14
加载中...