cf 218D
#include
#include
#include
#include
#include
using namespace std;
const int maxn=2*100000+10,inf=1e9;
struct node
{
int v,w;
node(int _v=0,int _w=0)
{
v=_v;
w=_w;
}
};
vector e[maxn];
vector<int>ans;
int dp[maxn];
void dfs1(int u,int fa)
{
dp[u]=0;
for(int i=0;iint v=e[u][i].v,w=e[u][i].w;
if(v==fa) continue;
dfs1(v,u);
dp[u]+=dp[v]+w;
}
}
void dfs2(int u,int fa)
{
for(int i=0;iint v=e[u][i].v,w=e[u][i].w;
if(v==fa) continue;
dp[v]=dp[u]+(w?-1:1);
dfs2(v,u);
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
e[i].clear();
ans.clear();
}
for(int i=1;iint u,v;
scanf("%d %d",&u,&v);
e[u].push_back(node(v,0));
e[v].push_back(node(u,1));
}
dfs1(1,-1);
dfs2(1,-1);
int minn=inf;
for(int i=1;i<=n;i++)
minn=min(minn,dp[i]);
printf("%d
",minn);
for(int i=1;i<=n;i++)
{
if(dp[i]==minn) ans.push_back(i);
}
for(int i=0;iif(i1) printf("%d ",ans[i]);
else printf("%d
",ans[i]);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ] 2233번: 사과나무 (Java)~트리는 어렵다!!!!!!!!!!!!!!!!!~ 전체 로직 1. parent 배열과 root 배열 채우기 Stack을 이용하여 트리 만들기 이진 배열을 비교하며 삭제하고자 하는 노드의 '실제 인덱스' 구하기 2. 가...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.