题目链接:
和UVa11354很类似
题意:
原先有一棵树,每次加一条边,看最小生成树大小;
这个和增量最小生成树,还是有一点点差别的,就是,正版增量最小生成树,是每次加入一条边后,删掉那个换里面的最大权,当然这里没有这个;
每次的找LCA,我猜可能LCA都会超时吧,没事过,也有可能可以,但是,因为是一直是之前的那棵树,还不如一次性算出来dis i 到 j 的最长路;
1 #include2 3 using namespace std; 4 5 const int maxn = 1000 + 5; 6 7 struct Edge 8 { 9 int from,to,dist; 10 }; 11 12 vector G[maxn]; 13 int pa[maxn]; 14 bool vis[maxn]; 15 int dis[maxn][maxn]; 16 17 void dfs(int u,int fa) 18 { 19 int d = G[u].size(); 20 for(int i=0; i d) 97 printf("%d\n",sum-maxx+d); 98 else printf("%d\n",sum); 99 100 }101 }102 103 return 0;104 }