Envy

感觉这种最小生成树上的啥题都差不多的解法。。

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define fi first
  4. #define se second
  5. #define mk make_pair
  6. #define PLL pair<LL, LL>
  7. #define PLI pair<LL, int>
  8. #define PII pair<int, int>
  9. #define SZ(x) ((int)x.size())
  10. #define ull unsigned long long
  11.  
  12. using namespace std;
  13.  
  14. const int N = 5e5 + ;
  15. const int inf = 0x3f3f3f3f;
  16. const LL INF = 0x3f3f3f3f3f3f3f3f;
  17. const int mod = 1e9 + ;
  18. const double eps = 1e-;
  19. const double PI = acos(-);
  20.  
  21. int n, m, q, a[N], b[N], w[N], va[N], vb[N], e[N];
  22. vector<int> vc[N];
  23.  
  24. int fa[N];
  25. int getRoot(int x) {
  26. return fa[x] == x ? x : fa[x] = getRoot(fa[x]);
  27. }
  28.  
  29. bool cmp(const int& a, const int& b) {
  30. return w[a] < w[b];
  31. }
  32.  
  33. int main() {
  34. scanf("%d%d", &n, &m);
  35. for(int i = ; i <= n; i++) fa[i] = i;
  36. for(int i = ; i <= m; i++) {
  37. scanf("%d%d%d", &a[i], &b[i], &w[i]);
  38. vc[w[i]].push_back(i);
  39. }
  40. for(int i = ; i <= ; i++) {
  41. if(!SZ(vc[i])) continue;
  42. for(auto& x : vc[i]) {
  43. va[x] = getRoot(a[x]);
  44. vb[x] = getRoot(b[x]);
  45. }
  46. for(auto& x : vc[i]) {
  47. fa[getRoot(b[x])] = getRoot(a[x]);
  48. }
  49. }
  50. scanf("%d", &q);
  51. while(q--) {
  52. bool flag = true;
  53. int num; scanf("%d", &num);
  54. for(int i = ; i <= num; i++) scanf("%d", &e[i]);
  55. for(int i = ; i <= num; i++) {
  56. if(va[e[i]] == vb[e[i]]) {
  57. flag = false;
  58. break;
  59. }
  60. }
  61. if(!flag) {
  62. puts("NO");
  63. continue;
  64. }
  65. sort(e + , e + + num, cmp);
  66. for(int L = , R = ; L <= num && flag; L = R) {
  67. while(R <= num && w[e[R]] == w[e[L]]) R++;
  68. for(int i = L; i < R; i++) {
  69. int x = va[e[i]], y = vb[e[i]];
  70. fa[x] = x, fa[y] = y;
  71. }
  72. for(int i = L; i < R; i++) {
  73. int x = va[e[i]], y = vb[e[i]];
  74. int u = getRoot(x), v = getRoot(y);
  75. if(u == v) {
  76. flag = false;
  77. break;
  78. }
  79. fa[v] = u;
  80. }
  81. }
  82. if(flag) puts("YES");
  83. else puts("NO");
  84. }
  85. return ;
  86. }
  87.  
  88. /*
  89. */

Codeforces 891C Envy的更多相关文章

  1. Codeforces 891C Envy(MST + 并查集的撤销)

    题目链接  Envy 题意  给出一个连通的无向图和若干询问.每个询问为一个边集.求是否存在某一棵原图的最小生成树包含了这个边集. 考虑$kruskal$的整个过程, 当前面$k$条边已经完成操作的时 ...

  2. CodeForces - 891C: Envy(可撤销的并查集&最小生成树)

    For a connected undirected weighted graph G, MST (minimum spanning tree) is a subgraph of G that con ...

  3. Codeforces 892E Envy

    问题描述 小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔.在游戏中,一共有n张矩形卡片,其中第i张卡片的 长度为a_i,宽度为b_i.小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩 ...

  4. Codeforces 891 C Envy

    题目大意 给定一个 $n$ 个点 $m$ 条边的连通的无向图,每条边有一个权值,可能有重边.给出 $q$ 组询问,一组询问给出 $k$ 条边,问是否存在一棵最小生成树包含这 $k$ 条边. 思路 这道 ...

  5. Codeforces Round #446 (Div. 2)

    Codeforces Round #446 (Div. 2) 总体:rating涨了好多,虽然有部分是靠和一些大佬(例如redbag和ShichengXiao)交流的--希望下次能自己做出来2333 ...

  6. 【CF891C】Envy(最小生成树)

    [CF891C]Envy(最小生成树) 题面 Codeforces 洛谷 题解 考虑\(MST\)的构建过程,对于所有权值相同的边一起考虑. 显然最终他们连出来的结果是固定的. 把连边改为把联通块联通 ...

  7. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) F. Souvenirs 线段树套set

    F. Souvenirs 题目连接: http://codeforces.com/contest/765/problem/F Description Artsem is on vacation and ...

  8. 代码的坏味道(18)——依恋情结(Feature Envy)

    坏味道--依恋情结(Feature Envy) 特征 一个函数访问其它对象的数据比访问自己的数据更多. 问题原因 这种气味可能发生在字段移动到数据类之后.如果是这种情况,你可能想将数据类的操作移动到这 ...

  9. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

随机推荐

  1. JS 互相调用iframe页面中js方法、VUE里 iframe 互调方法

    1,父 html 调用子 iframe 内方法: document.getElementById("iframe").contentWindow.func(data1,data2. ...

  2. pyqt5的使用目录

    pyqt5的安装 我的第一个例子 标签控件QLabel的使用   按钮QPushButton 信号与槽 pyqt5模块介绍 pycharm活动模板  QObject 定时器  QWidget类-坐标系 ...

  3. 【通信】URLConnection 详细

    通信链接.程序可以通过URLConnection实例向该URL发送请求.读取URL引用的资源. 通常创建一个和 URL的连接,并发送请求.读取此URL引用的资源需要如下几个步骤: 通过调用URL对象o ...

  4. mongodb系列~mongodb慢语句(2)

    一简介:今天遇到一个慢日志的排查和解决过程 二 版本:3.0.6 三 架构:分片集群 四 具体过程 1 程序响应很慢,具体日志寻找定点sql(mongodb慢日志记录在log日志里) awk '$NF ...

  5. 【比赛游记】NOIP2018游记

    往期回顾:[比赛游记]NOIP2017游记 转眼间又过去了一年,当年还是初中生的我已经摇身一变成为了AHSOFNU的高一学生. 回顾这一年我好像也没学什么新东西,要说有用的可能就无旋Treap吧,不知 ...

  6. 【API】恶意样本分析手册——API函数篇

    学编程又有材料了 http://blog.nsfocus.net/malware-sample-analysis-api/

  7. Windows系统FTP Shell

    ftp open 10.0.0.0.2 21101 user passwd ls cd pwd delete get /home/err.log Error.log put err.log /home ...

  8. 用secureCRT操作ubuntu终端

    用secureCRT操作ubuntu终端 ubuntu下先安装ssh windows下win+R再输入ubuntu的ip地址   ubuntu 检测端口号的命令 netstat -antp   下载到 ...

  9. grep用法【转】

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  10. Ajax+json+jquery实现无限瀑布流布局

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...