暂无链接

航线规划

【问题描述】

对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel
星球所在的星系——一个巨大的由千百万星球构成的Samuel星系。 星际空间站的Samuel
II巨型计算机经过长期探测,已经锁定了Samuel星系中许多星球的空间坐标,并对这些
星球从1开始编号1、2、3……。 一些先遣飞船已经出发,在星球之间开辟探险航线。
探险航线是双向的,例如从1号星球到3号星球开辟探险航线,那么从3号星球到1号星
球也可以使用这条航线。
例如下图所示:

在5个星球之间,有5条探险航线。 A、B两星球之间,如果某条航线不存在,就无法从A星球抵达B星球,我们则称这条航线为关键航线。 显然上图中,1号与5号星球之间的关键航线有1条:即为4-5航线。 然而,在宇宙中一些未知的磁暴和行星的冲撞,使得已有的某些航线被破坏,随着越来越多的航线被破坏,探险飞船又不能及时回复这些航线,可见两个星球之间的关键航线会越来越多。 假设在上图中,航线4-2(从4号星球到2号星球)被破坏。此时,1号与5号星球之间的关键航线就有3条:1-3,3-4,4-5。

小联的任务是,不断关注航线被破坏的情况,并随时给出两个星球之间的关键航线数目。现在请你帮助完成。

【输入格式】

第一行有两个整数N,M。表示有N个星球,初始时已经有M条航线。随后有M行,每行有两个不相同的整数A、B表示在星球A与B之间存在一条航线。接下来每行有三个整数C、A、B。C为1表示询问当前星球A和星球B之间有多少条关键航线;C为0表示在星球A和星球B之间的航线被破坏,当后面再遇到C为1的情况时,表示询问航线被破坏后,关键路径的情况,且航线破坏后不可恢复; C为-1表示输入文件结束,这时该行没有A,B的值。

【输出格式】

对每个C为1的询问,输出一行一个整数表示关键航线数目。 注意:我们保证无论
航线如何被破坏,任意时刻任意两个星球都能够相互到达。在整个数据中,任意两个星球
之间最多只可能存在一条直接的航线。

【输入样例】

5 5
1 2
1 3
3 4
4 5
4 2
1 1 5
0 4 2
1 5 1
-1

【输出样例】

1
3

【数据范围】

对于30%的数据:1 ≤ N ≤ 20,1 ≤ M ≤ 35,1 ≤ 查询次数+破坏航线数目 ≤ 100

对于50%的数据:1 ≤ N ≤ 5000,1 ≤ M ≤ 5300,1 ≤ 查询次数+破坏航线数目 ≤ 10000

对于100%的数据:1 ≤ N ≤ 30000,1 ≤ M ≤ 100000,1 ≤ 查询次数+破坏航线次数 ≤ 40000

题解

忘了拆点会让点数翻倍,少开了一半数组,100100100分惨变606060分。

思路很简单,一看就需要离线,当图变成树的时候,所有边都是关键路径,倒着往里面加边的时候,每形成一个环,那么环上的所有路径都可以被这条路径在环上的补集替换,即整个环上的边都不再是关键路径了。

直接大力LCT\mathcal{LCT}LCT维护,把边换成点权为111的点,成环的时候将整条链的点赋值为000,LCT\mathcal{LCT}LCT维护一下点权和就可以求出链上的关键路径数了。

代码
#include<bits/stdc++.h>
#define ls son[v][0]
#define rs son[v][1]
using namespace std;
const int M=3e5+5;
struct sd{int op,a,b,id;}ope[M];
set<int>mmp[M];
int tot,n,m,id,son[M][2],dad[M],val[M],sum[M],ans[M];
bool rev[M],zero[M];
bool notroot(int v){return son[dad[v]][0]==v||son[dad[v]][1]==v;}
void up(int v){sum[v]=sum[ls]+sum[rs]+val[v];}
void turn(int v){swap(ls,rs),rev[v]^=1;}
void dan(int v){val[v]=sum[v]=0;zero[v]=1;}
void push(int v)
{if(rev[v]){if(ls)turn(ls);if(rs)turn(rs);rev[v]=0;}if(zero[v]){if(ls)dan(ls);if(rs)dan(rs);zero[v]=0;}
}
void down(int v){if(notroot(v))down(dad[v]);push(v);}
void spin(int v)
{int f=dad[v],ff=dad[f],k=son[f][1]==v,w=son[v][!k];if(notroot(f))son[ff][son[ff][1]==f]=v;son[v][!k]=f,son[f][k]=w;if(w)dad[w]=f;dad[f]=v,dad[v]=ff;up(f);up(v);
}
void splay(int v)
{down(v);int f,ff;while(notroot(v)){f=dad[v],ff=dad[f];if(notroot(f))spin((son[f][0]==v)^(son[ff][0]==f)?v:f);spin(v);}up(v);
}
void access(int v){for(int f=0;v;v=dad[f=v])splay(v),rs=f,up(v);}
void beroot(int v){access(v),splay(v),turn(v);}
int root(int v){access(v),splay(v);while(ls)push(v),v=ls;return v;}
void split(int x,int y){beroot(x),access(y),splay(y);}
void link(int x,int y){beroot(x);dad[x]=y;}
void in()
{int a,b,c;scanf("%d%d",&n,&m);for(int i=1;i<=m;++i){scanf("%d%d",&a,&b);if(a>b)swap(a,b);mmp[a].insert(b);}for(tot=1;;++tot){scanf("%d",&a);if(a==-1)break;scanf("%d%d",&b,&c);if(!a){if(b>c)swap(b,c);mmp[b].erase(c);}ope[tot]=(sd){a,b,c,tot};}--tot;
}
void ac()
{memset(ans,-1,sizeof(ans));set<int>::iterator j;id=n;for(int i=1;i<=n;++i)for(j=mmp[i].begin();j!=mmp[i].end();++j){beroot(i);if(root(*j)!=i){++id;val[id]=sum[id]=1;link(i,id);link(id,*j);}else split(i,*j),dan(*j);}for(int i=tot;i>=1;--i){if(ope[i].op)split(ope[i].a,ope[i].b),ans[ope[i].id]=sum[ope[i].b];else split(ope[i].a,ope[i].b),dan(ope[i].b);}for(int i=1;i<=tot;++i)if(~ans[i])printf("%d\n",ans[i]);
}
int main(){in();ac();}

[2018.07.26 T1] 航线规划相关推荐

  1. Firing:Preserving the Employee's Dignity(尊严)(2018/07/26)

    Firing :Preserving Dignity Do you find it easy to fire an employee? Do you think it is possible to f ...

  2. rockycapture_RockyCapture航线规划软件介绍文档

    马上注册,享用更多功能,让我们一起,飞遍世界! 您需要 登录 才可以下载或查看,没有帐号?抢先注册 x RockyCapture 航线规划 RockyCapture 航线设计规划是基于大疆无人机,由珞 ...

  3. 无人机航线规划软件[航线通]

    无人机航线规划软件-航线通(RoutePlan)是数据禾(databox.store)研发的具有自主知识产权的无人机航线规划及飞行的移动端控制软件,主要适用于大疆无人机,包括精灵系列.御系列.悟系列及 ...

  4. IDEA 2018 激活 IDEA 2018.3激活教程 最新的(三种)—2018.11.26亲测

    https://blog.csdn.net/HALEN001/article/details/81137092 IntelliJ IDEA 2018.3(Ultimate Edition)激活方法 本 ...

  5. 成都市等2009年《四川省建设工程清单计价定额》人工费调整批复〔2018〕26号

    四川省建设工程造价管理总站 川建价发[2018]26号 四川省建设工程造价管理总站 关于对成都市等13个市.州 2009年<四川省建设工程工程量清单计价定额> 人工费调整的批复 各有关市. ...

  6. DL之Mask R-CNN:2018.6.26世界杯阿根廷队VS尼日利亚比赛2:1实现Mask R-CNN目标检测

    DL之Mask R-CNN:2018.6.26世界杯阿根廷队VS尼日利亚比赛2:1实现Mask R-CNN目标检测 目录 输出结果 人身检测 核心代码 输出结果 先上目标检测结果 人身检测 观众席:众 ...

  7. 2018.07.30 巴别时代

    * 项目部署更新 用符号链接 project => project1, project2 ln -s project2 project * composer自动加载机制 namespace =& ...

  8. 无人机怎么设定航线_收藏!老飞手的航线规划笔记在这里...(上篇)

    ​关注公众号"三维前沿",获取无人机.内外业技巧最新干货. 外业航线的布设尤为重要,因为要保证获取的影像满足测绘行业的要求,并且要在获取大区域图像的过程中可以做到尽量少的飞行的次数 ...

  9. 训练日志 2018.12.26

    今天看了一天网络流最大流,看到自闭...全程就是 wc 这也能实现,wc 这还能实现,wc 为什么这个模版的运行跟我手撸的结果不一样...跪了... 下午学院开会的时候跟实验室的几个大佬交流了一下进度 ...

  10. 暑期训练日志----2018.8.26

    训练第28天. 暑期训练最后一天,结束了... 看了看昨天下午网络赛的题,感觉自己也就能出一个...还是学的太少,新学期开始要加油,每天至少2个小时搞ACM 这个暑假收获很多,跟队友的配合比之前更有默 ...

最新文章

  1. 短视频未来3年的规模为3万亿元
  2. 2020-12-6(从反汇编理解指针和引用的区别)
  3. mysql错误:……is marked as crashed and should be repai
  4. Java方法 signature
  5. .net 将html写成的table 转换成excel_Python读取二进制,HTML,XML格式存储Excel
  6. thymeleaf 模板语言简介
  7. oracle常用表查询,ORACLE EBS常用表及查询语句(最终整理版)
  8. project文件_移动和发出时通过UploadsReWriter读取的任意文件
  9. python免费课程400节-北京市python儿童学编程
  10. 为用户设计良好的接口
  11. word中插入或更新自动目录后,正文内容也变成了目录的问题
  12. WIN7更改用户名访问共享文件夹
  13. html粘性导航原理,position:sticky粘性定位
  14. 【附源码】Java计算机毕业设计架构的博客平台设计(程序+LW+部署)
  15. oracle如何异地备份软件,数据库Oracle数据的异地的自动备份
  16. LOJ 3124 「CTS2019 | CTSC2019」氪金手游——概率+树形DP
  17. 18.MYSQL数据库(1)
  18. [计算机网络作业]第一章章节习题
  19. GPU加速原理浅析及代码实现
  20. 特征工程——特征转换

热门文章

  1. 超级易懂的非递归实现二叉树三种遍历(与网上都不一样)
  2. [POI2013]LUK-Triumphal arch
  3. 论财务自由与【生活-工作】平衡
  4. Wannafly挑战赛25 A 因子
  5. 关于vim复制剪贴粘贴命令的总结-转
  6. 微信内置浏览器不支持 onclick 如何解决?(原因是因为内面中的内容或者标签大部分是动态生成的)...
  7. 动态在网络图片上写字
  8. jQuery的实用特性扩展类库:jQuery++
  9. mysql日常工作中批量插入效率问题
  10. HashMap源码阅读