$n \leq 5e5$,$m \leq 5e5$的无向边权图,$q \leq 5e5$个询问,每次问一系列边是否能同时存在于某棵最小生成树上。

一条边在最小生成树上,当比他小的边都加入后,加入他会使连通块数-1,也就是他两端的点在加入比他小的所有边后仍不在一起。

于是乎把所有询问的所有边排序,每次处理一个询问的一种边,新开一个并查集看看把这个询问的边加进去之后会不会有一条边是废的(没使连通块数-1,也就是两端点的并查集父亲相同)。

 //#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
//#include<queue>
//#include<time.h>
//#include<complex>
#include<algorithm>
#include<stdlib.h>
using namespace std; int n,m,lq;
#define maxn 500011
struct Edge{int from,to,v;}edge[maxn];
int ufs[maxn],vis[maxn],ufsb[maxn];
int find(int x) {return ufs[x]==x?x:(ufs[x]=find(ufs[x]));}
int findb(int Time,int x) {return vis[x]==Time?(ufsb[x]==x?x:(ufsb[x]=findb(Time,ufsb[x]))):(vis[x]=Time,(ufsb[x]=find(x)));} bool ans[maxn];
struct vnode{int id,e;};
vector<vnode> v[maxn],ve[maxn]; int main()
{
scanf("%d%d",&n,&m); int maxv=;
for (int i=,x,y,val;i<=m;i++) scanf("%d%d%d",&x,&y,&val),maxv=max(maxv,val),
edge[i]=(Edge){x,y,val},ve[val].push_back((vnode){x,y}); scanf("%d",&lq);
for (int i=,x,y;i<=lq;i++)
{
scanf("%d",&x);
while (x--) scanf("%d",&y),v[edge[y].v].push_back((vnode){i,y});
} for (int i=;i<=n;i++) ufs[i]=i;
int Time=;
for (int i=;i<=maxv;i++)
{
for (int j=,last=,to=v[i].size();j<to;j++)
{
int id=v[i][j].id,x=edge[v[i][j].e].from,y=edge[v[i][j].e].to;
if (last!=id) ++Time;
if (vis[x]!=Time) vis[x]=Time,ufsb[x]=find(x);
if (vis[y]!=Time) vis[y]=Time,ufsb[y]=find(y);
if (findb(Time,x)==findb(Time,y)) ans[id]=;
ufsb[ufsb[x]]=ufsb[y];
last=id;
}
for (int j=,to=ve[i].size();j<to;j++)
{
int x=find(ve[i][j].id),y=find(ve[i][j].e);
if (x!=y) ufs[x]=y;
}
}
for (int i=;i<=lq;i++) puts(ans[i]?"NO":"YES");
return ;
}

Codeforces891C. Envy的更多相关文章

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

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

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

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

  3. Codeforces 891C Envy

    Envy 感觉这种最小生成树上的啥题都差不多的解法.. #include<bits/stdc++.h> #define LL long long #define fi first #def ...

  4. 【CF891C】Envy 离线+最小生成树

    [CF891C]Envy 题意:给你一个图,边有边权,每次询问给你一堆边,问你是否存在一个原图的最小生成树包含给出的所有边.n,m,q<=100000 题解:思路很好的题. 首先有一个非常重要的 ...

  5. 1008 Envy(好题¥)

    1008: Envy 时间限制: 1 Sec  内存限制: 128 MB提交: 288  解决: 61[提交][状态][讨论版] 题目描述 今年的 ACM 比赛推出了一个赛后的娱乐活动,所有参赛选手排 ...

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

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

  7. Seven Deadly Sins: Gluttony, Greed, Sloth, Wrath, Pride, Lust, and Envy.

    Seven Deadly Sins: Gluttony, Greed, Sloth, Wrath, Pride, Lust, and Envy.七宗罪:暴食.贪婪.懒惰.暴怒.傲慢.色欲.妒忌.

  8. Codeforces891C(892E)

    传送门:here 简述题意:                                                                                       ...

  9. CF891C Envy 最小生成树/虚树

    正解:最小生成树/虚树 解题报告: 传送门! sd如我就只想到了最暴力的想法,一点儿优化都麻油想到,,,真的菜到爆炸了QAQ 然后就分别港下两个正解QAQ 法一,最小生成树 这个主要是要想到关于最小生 ...

随机推荐

  1. 使用Google Colab训练神经网络(二)

    Colaboratory 是一个 Google 研究项目,旨在帮助传播机器学习培训和研究成果.它是一个 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行.Colaborat ...

  2. 前端性能优化:细说JavaScript的加载与执行

    本文主要是从性能优化的角度来探讨JavaScript在加载与执行过程中的优化思路与实践方法,既是细说,文中在涉及原理性的地方,不免会多说几句,还望各位读者保持耐心,仔细理解,请相信,您的耐心付出一定会 ...

  3. OpenCV2:第八章 界面事件

    一.简介 OpenCV中提供了程序界面中的鼠标和键盘事件 二.鼠标事件 //  设置鼠标回调函数 void setMouseCallback ( const string& winname, ...

  4. web框架 http协议

    http 协议是超文本传输协议,位于osi七层的应用层,协议规定的就是请求与响应双方的一个消息格式,请求(请求行,请求头,空行,请求数据,请求行--请求方式URL协议版本\r\n请求头--user-a ...

  5. Spring框架针对dao层的jdbcTemplate操作crud之delete删除数据库操作 Spring相关Jar包下载

    首先,找齐Spring框架中IoC功能.aop功能.JdbcTemplate功能所需的jar包,当前13个Jar包 1.Spring压缩包中的四个核心JAR包,实现IoC控制反转的根据xml配置文件或 ...

  6. java在线聊天项目 swt可视化窗口Design 重新设计聊天窗口

    设计的聊天窗口如下: 制作过程: 首先,在默认的BorderLayout视图下, 上边也就是North处添加一个JPanel,将Layout调整为BorderLayout,West放一个JLabel用 ...

  7. sublime text 3143 最新激活方法

    1)输入激活码 —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60 ...

  8. json 将key值以字符串形式取出

    int GetJsonCString(const Json::Value& value, char* str, int n){ if (!value.empty() && va ...

  9. 控制mysql数字转换

    在实际工作中我们常常需要将数字进行格式化,比如将12.0073233变为12.01,或把12变为12.00,或把12变为0000012,这种格式之间的转换总结如下:     一,浮点数的转换--直接设 ...

  10. 快捷键,命令之tab/ history / alias / ls / cd / mkdir / touch /tree /cp /mv /rm /cat /head/grep

    第一阶段 快捷键 1 第二阶段 文件和目录操作命令 1 1.1 date / useradd 1 1.2 echo 调用变量 2 1.3 whoami 查看用户名 2 1.4 tab命令补全 2 1. ...