NC204314. Dis2
描述
输入描述
第一行一个正整数。
接下来行每行两个正整数
表示点
之间有一条边。
输出描述
输入共行,第
行输出一个整数表示与点
距离为
的点的个数。
示例1
输入:
4 1 2 2 3 3 4
输出:
1 1 1 1
说明:
点C(clang 3.9) 解法, 执行用时: 73ms, 内存消耗: 6456K, 提交时间: 2020-07-08 15:38:09
#include<stdio.h> int main() {int n,u[200050],v[200050],a[200050],b[200050]; scanf("%d",&n); for(int i=1;i<=n-1;i++) scanf("%d%d",&u[i],&v[i]); for(int i=1;i<=n-1;i++) { b[u[i]]++; b[v[i]]++; } for(int i=1;i<n;i++) { a[u[i]]+=b[v[i]]-1; a[v[i]]+=b[u[i]]-1; } for(int i=1;i<=n;i++) printf("%d\n",a[i]); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 129ms, 内存消耗: 6628K, 提交时间: 2020-06-27 07:27:51
#include<iostream> using namespace std; const int m=200007; int u[m],v[m],s[m],c[m],n; int main(){ cin>>n; for(int i=1;i<n;i++)cin>>u[i]>>v[i]; for(int i=1;i<n;i++)++c[u[i]],++c[v[i]]; for(int i=1;i<n;i++)s[u[i]]+=c[v[i]]-1,s[v[i]]+=c[u[i]]-1; for(int i=1;i<=n;i++)cout<<s[i]<<'\n'; }
C++14(g++5.4) 解法, 执行用时: 220ms, 内存消耗: 4956K, 提交时间: 2020-05-23 00:02:49
#include<iostream> #define f(i,n) for(int i=1;i<n;i++) const int m=2e5;int u[m],v[m],s[m],c[m],n; int main(){ std::cin>>n; f(i,n)std::cin>>u[i]>>v[i]; f(i,n)++c[u[i]],++c[v[i]]; f(i,n)s[u[i]]+=c[v[i]]-1,s[v[i]]+=c[u[i]]-1; f(i,n+1)std::cout<<s[i]<<'\n'; }