<='9'){a=a*10+ch-'0';ch=getchar();}return a*b;}void add(rint x,rint y){edge[++tot].to=y;edge[tot].nxt=head[x];head[x]=tot;}int find(rint x){if(fat[x]==x) return x;return fat[x]=find(fat[x]);}void get_dell(rint x,rint dex){bar[x]=dex;for(rint i=head[x];i;i=edge[i].nxt){rint y=edge[i].to;if(bar[y]==dex){++cnt;while(y!=x){dell[cnt].push_back(x);x=ac[x];}dell[cnt].push_back(y);}else ac[y]=x,get_dell(y,dex);}}void bfs(rint x,rint tp){d[x]=1,bl[x]=tp;q.push(x);while(!q.empty()){rint x=q.front();q.pop();for(rint i=head[x];i;i=edge[i].nxt){rint y=edge[i].to;if(!bar[y]&&!d[y]){bl[y]=tp;d[y]=d[x]+1;q.push(y);f[y][0]=x;for(rint j=1;j<=t;j++) f[y][j]=f[f[y][j-1]][j-1];}}}}int Lca(rint x,rint y){if(d[x]>d[y]) swap(x,y);for(rint i=t;i>=0;i--)if(d[f[y][i]]>=d[x]) y=f[y][i];if(x==y) return x;for(rint i=t;i>=0;i--){if(f[y][i]^f[x][i]){y=f[y][i];x=f[x][i];}}return f[x][0];}void solve(){for(rint i=1;i<=n;i++)if(!bar[i]) get_dell(i,++dex);memset(bar,0,sizeof(bar));for(rint i=1;i<=cnt;i++)for(rint j=0;j
View Code
:最小生成树+二分答案
被天皇忽悠说这道题贼恶心 , 去看题解(推锅推锅)然后1A掉不想说话 。
不是特别好想 。不过填了一种最小生成树题目的做题方法:通过改变边权来改变最小生成树的构成 。
黑白边 , 要求need条白边 。一开始sb的想成了树里只有白边 。
显然还有n-1-need条黑边 /糊脸(n是节点数目)顺嘴吐槽:BZOJ上直接跑最小生成树都能过……
二分给白边加上边权 , 跑最小生成树 , 看是否符合need条白边 。
直接暴力累计就好了没必要开优化(懒)还有人直接爆搜不二分都A了……
建议打二分咕咕咕~
#include
- 欧洲,实力最强的5个国家,谁才是第一强国呢 总结世界之最
- 王羲之的雷人年终总结:真希望我的字不受欢迎
- 个人销售日总结,房产销售个人总结怎么写?
- 数据挖掘分类算法的学习总结
- 【轻量级】轻量级网络结构总结
- 【618专题】4000元左右,有哪些好手机可以选择? 中关村在线手机
- 软件设计师通关诀窍
- 万字长文爆肝Python基础入门【第二弹、超详细数据类型总结】
- [G星计划]--项目开发总结
- 业绩不好怎么写总结,销售总结怎么写呀