博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并查集加优先队列
阅读量:6909 次
发布时间:2019-06-27

本文共 2982 字,大约阅读时间需要 9 分钟。

 

 

#include
using namespace std;const int maxn=1e6+10;int f[maxn];int visf[maxn];int vis[maxn];int as[maxn];vector
v[maxn];priority_queue
,greater
> q;int getf(int a){ if(f[a]==a) return a; else return f[a]=getf(f[a]);}int main(){ int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); while(q.size()) q.pop(); for(int i=1; i<=n; i++) { f[i]=i; vis[i]=0; visf[i]=0; v[i].clear(); } for(int i=1; i<=m; i++) { int a,b; scanf("%d%d",&a,&b); f[getf(b)]=getf(a); v[a].push_back(b); v[b].push_back(a); } int ans=0; for(int i=1; i<=n; i++) { if(getf(i)==i) ans++; if(visf[getf(i)]==0) { q.push(i); visf[getf(i)]=1; vis[i]=1; } } int len=0; while(!q.empty()) { int t1=q.top(); q.pop(); as[++len]=t1; for(int i=0; i

 

邻接表也是可以过的,,注意!!存有向图,数组开边的二倍!!初始化时要用memset(a,0,(m+1)*sizeof(int))

 

#include
using namespace std;const int maxn=1e6+10;int f[maxn];int visf[maxn];int vis[maxn];int as[maxn];//vector
v[maxn];const int maxm=2e6+10;int tot=0,head[maxm],nxt[maxm],ver[maxm];void add(int u,int v){ ver[++tot]=v; nxt[tot]=head[u]; head[u]=tot;}priority_queue
,greater
> q;int getf(int a){ if(f[a]==a) return a; else return f[a]=getf(f[a]);}int main(){ int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); memset(ver,0,(m*2+1)*sizeof(int)); memset(nxt,0,(m*2+1)*sizeof(int)); while(q.size()) q.pop(); for(int i=1; i<=n; i++) { f[i]=i; head[i]=0; vis[i]=0; visf[i]=0;// v[i].clear(); } tot=0; for(int i=1; i<=m; i++) { int a,b; scanf("%d%d",&a,&b); f[getf(b)]=getf(a); add(a,b); add(b,a);// v[a].push_back(b);// v[b].push_back(a); } int ans=0; for(int i=1; i<=n; i++) { if(getf(i)==i) ans++; if(visf[getf(i)]==0) { q.push(i); visf[getf(i)]=1; vis[i]=1; } } int len=0; while(!q.empty()) { int t1=q.top(); q.pop(); as[++len]=t1; for(int i=head[t1]; i; i=nxt[i]) { int y=ver[i]; if(vis[y]) continue; q.push(y); vis[y]=1; }// for(int i=0; i

 

转载于:https://www.cnblogs.com/dongdong25800/p/10801223.html

你可能感兴趣的文章
操场边的人
查看>>
内存泄漏和内存溢出
查看>>
设计模式——初步学习
查看>>
metabase实施文档
查看>>
10.3 定位连续值范围的开始点和结束点
查看>>
解析iscroll-小demo
查看>>
基站定位接口说明文档
查看>>
java实现邮件定时发送
查看>>
差分约束 【bzoj2330】[SCOI2011]糖果
查看>>
ArrayList和LinkedList区别
查看>>
Error_GL_KeyflexfieldDefinitionFactory.getStructureNumber无法找到应用产品
查看>>
js作用域及闭包
查看>>
CSS overflow 属性
查看>>
通过改变uiview的layer的frame来实现进度条
查看>>
ADB am 命令详细参数
查看>>
NOIp 数学基础
查看>>
nginx支持ipv6
查看>>
点名器
查看>>
Codeforces Problems-122A. Lucky Division
查看>>
移动端适配代码
查看>>