牛客練習賽64 B

鏈接:https://ac.nowcoder.com/acm/contest/5633/B
來源:牛客網
 

題目描述

給出一顆n個點n−1條邊的樹,點的編號爲1,2,...,n−1,n,對於每個點i(1<=i<=n),輸出與點i{i}i距離爲2的點的個數。

兩個點的距離定義爲兩個點最短路徑上的邊的條數。

輸入描述:

第一行一個正整數n。

接下來n−1行每行兩個正整數ui,vi​表示點ui,vi​之間有一條邊。

輸出描述:

輸入共n行,第i行輸出一個整數表示與點i距離爲2的點的個數。

示例1

輸入

4
1 2
2 3
3 4

輸出

1
1
1
1

說明

點1,3的距離爲2,點2,4的距離爲2。

備註:

1<=ui,vi<=n<=200000

n-1條邊所以沒有成環,直接算與其相鄰的點的相鄰點的個數即可

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
vector<int> we[200010];
int vis[200010];
int main(){
	int n;
	while( scanf("%d", &n) != EOF){
		for( int i = 0; i <= n; i++){
			we[i].clear();
			vis[i] = 0;
		}
		int l,  r;
		for( int i = 1; i < n; i++){
			scanf("%d %d", &l, &r);
			we[l].push_back(r);
			we[r].push_back(l);
		}
		for( int i = 1; i <= n; i++){
			ll sum = 0;
			for( int j = 0; j < we[i].size(); j++){
				sum+=we[we[i][j]].size() - 1;
			}
			printf("%lld\n", sum);
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章