bzoj4998: 星球联盟
被gc巨侠D飞来做这题,好恶心,还不让人在线LCT T_T (其实明明就是你忘了强行甩锅)
xgc:并查集乱搞就能过写什么LCT
动态维护双联通分量
我们离线做......
首先做一次最小生成树,构出搜索树
然后没有用到的边就拿去暴力合并环,用并查集跳着找
完了
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std;struct node {int x,y,next; }a[810000];int len,last[210000]; void ins(int x,int y) {len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len; } int fa[2][210000]; int findfa(int x,int w) {if(fa[w][x]<0)return x;fa[w][x]=findfa(fa[w][x],w);return fa[w][x]; } int dep[210000]; void dfs(int x) {for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(dep[y]==0)dep[y]=dep[x]+1, fa[0][y]=x, dfs(y);} } int Link(int x,int y) {int fx=findfa(x,1),fy=findfa(y,1);if(fx!=fy){int tot=0; x=fx,y=fy;while(x!=y){if(dep[x]<dep[y])swap(x,y);tot+=fa[1][x];fa[1][x]=findfa(fa[0][x],1);x=fa[1][x];}fa[1][x]+=tot;}return -fa[1][findfa(x,1)]; }struct edge{int x,y;}e[410000]; bool v[410000]; int main() {freopen("a.in","r",stdin);freopen("a.out","w",stdout);int n,m,Q,x,y;scanf("%d%d%d",&n,&m,&Q);for(int i=1;i<=n;i++)fa[1][i]=-1;len=1;memset(last,0,sizeof(last));memset(v,false,sizeof(v));for(int i=1;i<=m+Q;i++){scanf("%d%d",&e[i].x,&e[i].y);int fx=findfa(e[i].x,1),fy=findfa(e[i].y,1);if(fx!=fy){v[i]=true; fa[1][fx]=fy;ins(e[i].x,e[i].y), ins(e[i].y,e[i].x);}}memset(dep,0,sizeof(dep));for(int i=1;i<=n;i++)if(dep[i]==0) dep[i]=1, fa[0][i]=0, dfs(i);for(int i=1;i<=n;i++)fa[1][i]=-1;for(int i=1;i<=m+Q;i++){if(v[i]==true){if(i>m)printf("No\n");}else{int d=Link(e[i].x,e[i].y);if(i>m){if(d==-1)printf("No\n");else printf("%d\n",d);}}}return 0; }
转载于:https://www.cnblogs.com/AKCqhzdy/p/9673385.html
bzoj4998: 星球联盟相关推荐
- bzoj4998 星球联盟
bzoj4998 星球联盟 原题链接 题解 先按照输入顺序建一棵树(森林),然后用一个并查集维护联盟的关系,对于不是树上的边\(a-b\),就把\(a-lca(a,b),b-lca(a,b)\)全部合 ...
- 【bzoj 入门OJ】[NOIP 热身赛]Problem C: 星球联盟(并查集)
Problem C: 星球联盟 Time Limit: 4 Sec Memory Limit: 256 MB Submit: 57 Solved: 15 [Submit][Status][Web ...
- [bzoj4998][LCT][并查集]星球联盟
Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成 联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条 ...
- JZOJ 3875. 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条 ...
- 2017.08.20【NOIP提高组】模拟赛B组 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
####Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧 ...
- 2017.08.20【NOIP提高组】模拟赛B组 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)...
####Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧 ...
- bzoj2959 长跑
LCT新姿势:维护边双连通分量. 题意:给你一张无向图,有加边,改点权操作. 你需要回答的是:从a到b,给每条边任意定向后,能经过的点权之和最大是多少.(每个点只算一次,点权非负). 可以发现,一个边 ...
- [暑假的bzoj刷水记录]
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊 堆一起算了 隔一段更新一下. 7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...
- 2W销量Steam大神,光临联盟微信群,近距离分享成功之路!(聊天实录)
东方异文石 晚上9点,有群里的「狐玩」大佬邀请一位 Steam 独立开发者,来到 Creator 星球联盟群,分享大作一起交流学习! 游戏名为:东方异文石,截图一发到群里,大家都被美术吸引了,这不是一 ...
最新文章
- 29.CSS3边框图片效果
- On Perseverance
- 给定一个排序好的数组,插入一个数,使其仍然有规律不使用排序算法
- 用户金字塔模型详解及在实际运营工作中的意义
- 技术部门 Leader 与团队那些事
- [No0000178]改善C#程序的建议1:非用ICloneable不可的理由
- android程序设计背景,android – 以可编程方式设置drawable作为背景
- Java之IO,BIO,NIO,AIO知多少?【请按正文网址阅读】
- 火山PC-64位炫彩界面库调用试水-加载资源文件(UI教程)
- Ubuntu+ros 绑定端口,一劳永逸,再也不怕端口变化啦!
- Linux Mint 19 Tara x86_64安装Docker-ce
- svchost.exe“病毒”
- wz框架登录功能详解——demo1
- 国外电子与通信教材系列最新目录单
- 【搬家】VB.NET开发全功能串口调试助手
- 各大门户免费登录入口
- 台式计算机的安装顺序,台式电脑安装步骤教程
- 史上最完美的Android沉浸式状态导航栏攻略
- 键盘事件是什么?键盘事件包括哪几种?
- 人工智能无法替代的几个职业
热门文章
- 第十三届蓝桥杯青少年STEMA(2021.08-2021.03)C++
- 《算法竞赛进阶指南》数论篇
- null未定义_JS 里的数据类型 - null amp; undefined
- 电商扣减库存_电商平台仓库管理系统究竟有何功能?
- Spring Boot笔记-@Qualifier与@Autowired与@Bean
- Web前端笔记-2D图形平面内平移定位(two.js)
- WEB安全基础-点击劫持漏洞基础
- 专业课程设计之客户与服务器程序的同步与通信机制的设计(四)信号量
- djnago seeeion
- linux调用函数和case,Shell篇(3)-单双引号 ,函数及case语句用法