1 条题解
-
0赵青海 (huhe) LV 7 SU @ 2022-8-25 21:11:42
#include <cstdio> #include <cstring> #include <algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) #define rep(i,a) for(int i=lst[a];i;i=nxt[i]) using namespace std; int read() { char ch; for(ch=getchar();ch<'0'||ch>'9';ch=getchar()); int x=ch-'0'; for(ch=getchar();ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; return x; } const int N=4e5+5; int t[N<<1],nxt[N<<1],lst[N],l; void add(int x,int y) { t[++l]=y;nxt[l]=lst[x];lst[x]=l; } int n,m,sz[N],dfn[N],w[N],son[N],cnt[N],a[N],b[N],an[N][2],tot,mx,id; void dfs(int x,int y) { sz[x]=1; dfn[x]=++tot; w[tot]=x; int k=0; rep(i,x) if (t[i]!=y) { dfs(t[i],x); sz[x]+=sz[t[i]]; if (sz[t[i]]>k) k=sz[t[i]],son[x]=t[i]; } } void ins(int x) { cnt[a[x]] += b[x]; if (cnt[a[x]]>mx||cnt[a[x]]==mx&&a[x]<id) mx=cnt[a[x]],id=a[x]; } void solve(int x,int y) { rep(i,x) if (t[i]!=y&&t[i]!=son[x]) { solve(t[i],x); fo(j,dfn[t[i]],dfn[t[i]]+sz[t[i]]-1) cnt[a[w[j]]] -= b[w[j]]; } id=0;mx=0; if (son[x]) solve(son[x],x); rep(i,x) if (t[i]!=y&&t[i]!=son[x]) fo(j,dfn[t[i]],dfn[t[i]]+sz[t[i]]-1) ins(w[j]); ins(x); an[x][0]=id;an[x][1]=mx; } int main() { n=read();m=read(); fo(i,1,n-1) { int x=read(),y=read(); add(x,y);add(y,x); } dfs(1,0); fo(i,1,n) a[i]=read(),b[i]=read(); solve(1,0); fo(i,1,n) printf("%d %d\n",an[i][0],an[i][1]); return 0; }
- 1
信息
- ID
- 2708
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 15
- 已通过
- 6
- 上传者