http://uoj.ac/problem/14

由于加入的边权递增,可以直接运行kruskal并支持撤销,但这样如果反复批量删边和撤销,时间复杂度会退化,因此需要对删边操作加上延时处理,只有在删边后下一个操作不是撤销时才执行删边。由于有撤销,并查集需要按秩合并且不路径压缩。

  1. #include<bits/stdc++.h>
  2. typedef long long i64;
  3. const int N=;
  4. int _(){
  5. int x;
  6. scanf("%d",&x);
  7. return x;
  8. }
  9. int n,m;
  10. int f[N][];
  11. int po,ep=,ep1=;
  12. #define sz f][1
  13. #define fa f][0
  14. int gf(int x){
  15. while(x!=x[fa])x=x[fa];
  16. return x;
  17. }
  18. void lk(int x,int y){
  19. x[fa]=y;
  20. y[sz]+=x[sz];
  21. }
  22. void ct(int x,int y){
  23. x[fa]=x;
  24. y[sz]-=x[sz];
  25. }
  26. struct ev{
  27. int a,b,ec;
  28. i64 sum;
  29. void undo(){ct(a,b);}
  30. }e[N];
  31. void fix(){
  32. while(ep1<ep)e[ep--].undo();
  33. }
  34. void ae(int v){
  35. po=;
  36. fix();
  37. ev&e0=e[ep];
  38. ev&e1=e[ep1=++ep];
  39. int x=gf(_()),y=gf(_());
  40. if(x==y){
  41. e1=(ev){,,e0.ec,e0.sum};
  42. }else{
  43. if(x[sz]>y[sz])std::swap(x,y);
  44. lk(x,y);
  45. e1=(ev){x,y,e0.ec+,e0.sum+v};
  46. }
  47. }
  48. void de(){
  49. po=;
  50. fix();
  51. ep1=ep-_();
  52. }
  53. void undo(){
  54. if(!po)e[ep--].undo();
  55. ep1=ep;
  56. }
  57. int main(){
  58. n=_();m=_();
  59. for(int i=;i<=n;++i){
  60. i[fa]=i;
  61. i[sz]=;
  62. }
  63. for(int i=,o;i<=m;++i){
  64. o=_();
  65. if(o==)ae(i);
  66. else if(o==)de();
  67. else undo();
  68. printf("%lld",e[ep1].ec==n-?e[ep1].sum:);
  69. }
  70. return ;
  71. }

uoj #14.【UER #1】DZY Loves Graph的更多相关文章

  1. 2019.01.22 uoj#14. 【UER #1】DZY Loves Graph(并查集)

    传送门 题意简述: 要求支持以下操作: 在a与b之间连一条长度为i的边(i是操作编号):删除当前图中边权最大的k条边:表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作. 要求在每次操作后 ...

  2. 【UOJ #14】【UER #1】DZY Loves Graph

    http://uoj.ac/problem/14 题解很好的~ 不带路径压缩的并查集能保留树的原本形态. 按秩合并并查集可以不用路径压缩,但是因为此题要删除,如果把深度当为秩的话不好更新秩的值,所以把 ...

  3. 【UER #1】DZY Loves Graph

    UOJ小清新题表 题目内容 UOJ链接 DZY开始有\(n\)个点,现在他对这\(n\)个点进行了\(m\)次操作,对于第\(i\)个操作(从\(1\)开始编号)有可能的三种情况: Add a b: ...

  4. 【UER #1】DZY Loves Graph(待卡常数)

    题解: 正解是可持久化并查集 但这个显然是lct可以维护的 但这常数是个问题啊??? #include <bits/stdc++.h> using namespace std; struc ...

  5. UOJ_14_【UER #1】DZY Loves Graph_并查集

    UOJ_14_[UER #1]DZY Loves Graph_并查集 题面:http://uoj.ac/problem/14 考虑只有前两个操作怎么做. 每次删除一定是从后往前删,并且被删的边如果不是 ...

  6. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  7. 【BZOJ3563/BZOJ3569】DZY Loves Chinese I/II(随机化,线性基)

    [BZOJ3563/BZOJ3569]DZY Loves Chinese I/II(随机化,线性基) 题面 搞笑版本 正经版本 题面请自行观赏 注意细节. 题解 搞笑版本真的是用来搞笑的 所以我们来讲 ...

  8. UOJ#454. 【UER #8】打雪仗

    UOJ#454. [UER #8]打雪仗 http://uoj.ac/problem/454 分析: 好玩的通信题~ 把序列分成三块,\(bob\)先发出这三块中询问点最多的一块给\(alice\). ...

  9. 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题

    [BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以 ...

随机推荐

  1. 测试那些事儿—BUG

    一.作为测试人员,你应该这样报BUG: 不要对程序员说,你的代码有BUG. 他的第一反应是:1.你的环境有问题吧:2.你踏马到底会不会用? 如果你委婉的说:你这个程序和预期的不一样,你看看是不是我的方 ...

  2. xdoj-1319 求树上任意一点的最大距离----利用树的直径

    1 #include <bits/stdc++.h> using namespace std; ; vector < vector <int> > g(N); in ...

  3. 重写&重载

    重写:子类对父类或接口中方法重新定义,是同一个方法 (1)子类不能重写final方法 (2)子类必须重写abstract方法 重载:一个类内部,方法同名,参数列表不同 (1)返回值不能作为区分重载方法 ...

  4. hdu2255 奔小康赚大钱 二分图最佳匹配--KM算法

    传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住 ...

  5. CH5701 开车旅行

    题意 5701 开车旅行 0x50「动态规划」例题 描述 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 ...

  6. hashCode()方法 和 hash()方法

    String str = "abc"; String str1 = "abc"; System.out.println(str == str1); //true ...

  7. MySQL Session--批量KILL会话

    使用SELECT INTO OUTFILE+SOURCE批量KILL ## 查看kill_id文件是否存在 SYSTEM cat /tmp/kill_id.sql ## 如果文件存在,则先删除 sys ...

  8. MySQL--数据库连接异常问题汇总

    ======================================================== Name or service not known 错误消息: [Warning] I ...

  9. src-d engine 强大的git 历史分析工具

    src-d engine 包含了Babelfish ,同时可以看作是Babelfish 的升级版本,我们可以使用sql 进行代码分析 备注: 注意运行的时候需要容器支持 使用 安装docker   参 ...

  10. java System.arraycopy()

    package study.stage2; import java.util.Arrays; /** * Created by Sandy.Liu on 2017/7/19. */public cla ...