luogu P2597 [ZJOI2012]灾难
这道题好仙啊,不过暴力都能拿70pts。 考虑每个点的贡献,会发现,它只对它所有食物的LCA及LCA到根的路径上的节点有灾难值为一的贡献。 然后就是建树啦,我们必须保证当前节点的所有食物都已建好树,所以top_sort,在更新入度到为零时,就求出它所有食物的LCA, 然后将LCA做为此节点的父节点,并令sum(lca)++,更新ST表。。。 最后还要统计节点对LCA到根的节点的贡献,做一次树上前缀和即可。 这个玩意什么时候叫做树上前缀和了QAQ。。其实特别low。 代码较丑,搞了三个链式前向星,最后还因为超级源点的深度和生产者的深度都赋成了 1 卡了半天。。。。 Code: #include<iostream> #include<cstdio> #include<queue> #define N 100000 using namespace std; queue<int> q; int n,Head[N],ver[N],nex[N],du[N],f[N][21],d[N],tot,sum[N]; int Head2[N],ver2[N],nex2[N],tot2; int Head3[N],ver3[N],nex3[N],tot3; inline int read(){ char c=getchar();int x=0,flag=1; while(c<'0' || c>'9')