社区讨论
萌新TLE 求调
CF891CEnvy参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @loiiheb2
- 此快照首次捕获于
- 2023/11/03 19:07 2 年前
- 此快照最后确认于
- 2023/11/03 20:53 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+9;
int n,m,q,l;
struct Edge{
int from,to,val;
int idx;
int p;
}f[N],g[N],e[N*2];
int vis[N];
int ans[N];
struct dsu{
int stk[N],topa=0;
int fa[N],sz[N];
inline void init(){
topa=0;
for(int i=1;i<=n;i++)fa[i]=i,sz[i]=1;
}
int find(int x){
return fa[x]==x? x:find(fa[x]);
}
inline void merge(int x,int y){
if(x==y)return;
// cout<<"#!!!#!#$"<<x<<' '<<y<<'\n';
if(sz[x]<sz[y])swap(x,y);
sz[x]+=sz[y];
fa[y]=x;
stk[++topa]=y;
return;
}
inline void del(){
if(!topa)return;
int u=stk[topa];
--topa;
sz[fa[u]]-=sz[u];
fa[u]=u;
return;
}
inline void roll(int x=0){
while(topa>x)del();
return;
}
}d;
inline bool cmp(Edge a,Edge b){
return a.val<b.val;
}
inline bool cmp2(Edge a,Edge b){
if(a.idx==b.idx)return a.val<b.val;
return a.idx<b.idx;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
d.init();
for(int i=1;i<=m;i=-~i){
cin>>f[i].from>>f[i].to>>f[i].val;
f[i].idx=i;
g[i]=f[i];
}
sort(f+1,f+m+1,cmp);
cin>>q;
for(int i=1;i<=q;i=-~i){
int len;
ans[i]=1;
cin>>len;
for(int j=1;j<=len;j=-~j){
int x;
cin>>x;
e[++l]=g[x];
e[l].idx=i;
e[l].p=x;
}
}
sort(e+1,e+l+1,cmp2);
int pos=1;
int las=0;
int num=0;
// for(int i=1;i<=l;i++){
// if(e[i].val)
// num++;
// }
for(int i=1;i<=l;i=-~i){
if(!ans[e[i].idx])continue;
if(i>1&&e[i-1].idx!=e[i].idx){
d.roll();
pos=1;
// if(e[i-1].idx<e[i].idx)cout<<'\n';
}
while(pos<=m&&f[pos].val<g[e[i].p].val){
// cout<<"????"<<pos<<' '<<f[pos].from<<' '<<f[pos].to<<' '<<d.find(f[pos].from)<<' '<<d.find(f[pos].to)<<'\n';
d.merge(d.find(f[pos].from),d.find(f[pos].to));
pos++;
}
// cout<<'#'<<pos<<' '<<g[e[i].p].from<<' '<<g[e[i].p].to<<' '<<d.find(g[e[i].p].from)<<' '<<d.find(g[e[i].p].to)<<'\n';
int fx=d.find(g[e[i].p].from);
int fy=d.find(g[e[i].p].to);
if(fx==fy)ans[e[i].idx]=0;
else d.merge(fx,fy);
}
for(int i=1;i<=q;i=-~i){
ans[i]?puts("YES"):puts("NO");
}
return 0;
}
/*
5 7
1 2 2
1 3 2
2 3 1
2 4 1
3 4 1
3 5 2
4 5 2
5
2 3 4
3 3 4 5
2 1 7
2 1 2
2 2 4
*/
回复
共 0 条回复,欢迎继续交流。
正在加载回复...