首页 > 其他分享 >普及-的并查集(都是板子)

普及-的并查集(都是板子)

时间:2022-10-30 14:13:41浏览次数:65  
标签:普及 return int fy 查集 板子 fx printf find

 

 

 

 

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
struct Node{
int bn, ed, t;
}a[N];
int f[N];
int find(int x){ return x == f[x] ? x : f[x] = find(f[x]); }
bool cmp(Node x, Node y) { return x.t < y.t; }
int main(){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1;i <= m;i ++)
scanf("%d%d%d", &a[i].bn, &a[i].ed, &a[i].t);
sort(a + 1, a + m + 1, cmp);
for(int i = 0;i <= n;i ++) f[i] = i;
for(int i = 1;i <= m;i ++){
int fx = find(a[i].bn), fy = find(a[i].ed);
if(fx != fy)
f[fy] = fx, n --;
if(n == 1){
printf("%d", a[i].t);
return 0;
}
}
printf("-1");
return 0;
}

 

 

#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int _map[N][N], f[N];
struct Node{
int s, t, w;
}a[N * N];
bool cmp(Node x, Node y){ return x.w < y.w; }
int find(int x){ return f[x] == x ? x :f[x] = find(f[x]); }
int main(){
int n;
scanf("%d", &n);
int cnt = 0;
for(int i = 1;i <= n;i ++){
f[i] = i;
for(int j = 1;j <= n;j ++){
scanf("%d", &_map[i][j]);
if(i < j) a[++ cnt] = {i, j, _map[i][j]};
}
}
sort(a + 1, a + cnt + 1, cmp);
int ans = 0;
for(int i = 1;i <= cnt; i ++){
int fx = find(a[i].s), fy = find(a[i].t);
if(fx != fy){
f[fx] = fy;
ans += a[i].w;
n --;
}
if(n == 1){
printf("%d", ans);
return 0;
}
}
printf("-1");
return 0;
}

 

#include<bits/stdc++.h>
using namespace std;
const int N = 5e3 + 7;
int f[N];
int st[N], t[N];
int find(int x){ return f[x] == x ? x : f[x] = find(f[x]); }
int main(){
int n, m, p;
scanf("%d%d%d", &n, &m, &p);
for(int i = 0;i <= n;i ++) f[i] = i;
for(int i = 0;i < m;i ++) scanf("%d%d", &st[i], &t[i]);
for(int i = 0;i < m;i ++){
int fx = find(st[i]), fy = find(t[i]);
if(fx != fy)f[fx] = fy;
}
for(int i = 0;i < p;i ++){
int x, y;
scanf("%d%d", &x, &y);
if(find(x) == find(y))printf("Yes\n");
else printf("No\n");
}
return 0;
}

#include<bits/stdc++.h>
using namespace std;
const int N = 2e4 + 7;
map<string, int> p;
int f[N];
int find(int x){ return f[x] == x ? x : f[x] = find(f[x]); }
int main(){
string str;
int n, m, k;
cin >> n >> m;
for(int i = 1;i <= n;i ++){
cin >> str;
p[str] = i;
f[i] = i;
}
for(int i = 0;i < m;i ++){
string str1, str2;
cin >> str1 >> str2;
int fx = find(p[str1]), fy = find(p[str2]);
if(fx != fy) f[fx] = fy;
}
cin >> k;
for(int i = 0;i < k;i ++){
string str1, str2;
cin >> str1 >> str2;
int fx = find(p[str1]), fy = find(p[str2]);
if(fx == fy)printf("Yes.\n");
else printf("No.\n");
}
return 0;
}


#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 7;
int f[N];
int find(int x){ return f[x] == x ? x : f[x] = find(f[x]); }
int main(){
int n, m;
cin >> n >> m;
for(int i = 0;i <= n;i ++) f[i] = i;
for(int i = 1;i <= m;i ++){
int p, x, y;
cin >> p >> x >> y;
if(p == 1){
int fx = find(x), fy = find(y);
if(fx != fy) f[fx] = fy;
}
else{
if(find(x) != find(y)) printf("N\n");
else printf("Y\n");
}
}
return 0;
}


#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
int f[N];
int find(int x) { return f[x] == x ? x : f[x] = find(f[x]); }
int main(){
int n, m, k;
cin >> n >> m >> k;
int ans = n * m;
for(int i = 0;i <= n * m;i ++)f[i] = i;
for(int i = 1;i <= k;i ++){
int x, y;
cin >> x >> y;
int fx = find(x), fy = find(y);
if(fx != fy){
f[fx] = fy;
ans --;
}
}
printf("%d", ans);
return 0;
}

 

标签:普及,return,int,fy,查集,板子,fx,printf,find
From: https://www.cnblogs.com/loser--QAQ/p/16841160.html

相关文章

  • rmq板子
    typedeflonglongLL;constexprinlineintlg2(LLx){returnsizeof(LL)*8-1-__builtin_clzll(x);}template<typenameT,size_tN,size_tK>structRangeQ......
  • 【XSY2485】MST(最小生成树+倍增lca+并查集)
    题面Description给定一个\(n\)个点\(m\)条边的连通图,保证没有自环和重边。对于每条边求出,在其他边权值不变的情况下,它能取的最大权值,使得这条边在连通图的所有最小生成......
  • 【bzoj4358】permu【XSY1535】seq(莫队+并查集)
    考虑莫队,但是我们发现这个东东只支持\(ins\)(至于怎么支持等会再讲),不支持\(del\)操作,所以我们构造一种只\(ins\)不\(del\)的莫队。由于我们按莫队的方法排序,第一关键字为\(......
  • 普及组东西
    临时扔一下T1#include<bits/stdc++.h>usingnamespacestd;inttot1,tot2;boolp1,p2;intmain(){intn;cin>>n;charawa=getchar();for(int......
  • 洛谷 P1077 [NOIP2012 普及组] 摆花 (DP)
    https://www.luogu.com.cn/problem/P1077题目描述摆上m盆花。一共有n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时同一种花放在一起,且不同......
  • 树状数组的板子
    该数据结构可以维护序列的前缀和 1.单点修改,求区间和#include<iostream>usingnamespacestd;constintN=5e5+2;intn,tr[N];intlowbit(intx){retu......
  • st表板子
    constintN=1e5+2;intst[N][20],n,a[N];voidinit(){inti,j;for(i=1;i<=n;i++)st[i][0]=a[i];for(j=1;j<20;j++)for(i=1;i+(1<<j)-1<......
  • 线段树的一些板子
    有2种方式,都是用的lazy标记,但具体用法不同 1)标记永久化 假设现在需要1.区间加值2.求区间和  #include<iostream>#include<algorithm>usingnamespacestd......
  • luogu 1908 逆序对板子
     逆序对的本质是二维偏序 给第一维排序(输入时已排好),统计y(k)>=y(i)k<i的个数用树状数组维护y值前缀和,需要的时候直接查询该题需要离散化这个y,再作为树状数组......
  • 并查集--翻译机的个数(顺丰2020年笔试)
    某学术会议上,一共有n个人参加,现在已知每个人会的语言(一个人可能不会任何语言)。现在有一种学习机,每一个学习机可以在会议期间使一个人暂时掌握一种自己不会的语言,问要使得任......