/*
*author:ZJX
*version dfs
*
*/#include<bits/stdc++.h>usingnamespace std;#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)#define _rev(i, a, b) for (int i = (a); i >= (b); --i)#define _for(i, a, b) for (int i = (a); i < (b); ++i)#define _rof(i, a, b) for (int i = (a); i > (b); --i)#define oo 0x3f3f3f3f#define ll long long#define db double#define eps 1e-8#define bin(x) cout << bitset<10>(x) << endl;#define what_is(x) cerr << #x << " is " << x << "s" << endl;#define met(a, b) memset(a, b, sizeof(a))#define all(x) x.begin(), x.end()#define pii pair<int, int>intnxt(){int ret;scanf("%d",&ret);return ret;}constint maxn =1e5+10;struct node{int nxt, to;}way[maxn*2];int head[maxn], cnt;voidaddedge(int from,int to){
way[++cnt].to = to;
way[cnt].nxt = head[from];
head[from]= cnt;}bool vis[maxn];int res;voiddfs(int cur){if(vis[cur])return;
res++;
vis[cur]=1;for(int i= head[cur];i;i=way[i].nxt){int to = way[i].to;dfs(to);}}signedmain(){int n =nxt(), k =nxt();
vector<pii> q;_rep(i,1, k){int a =nxt(), b =nxt();addedge(a,b),addedge(b, a);
q.push_back(make_pair(a, b));}for(auto i: q){if(!vis[i.first]&&!vis[i.second])res--;dfs(i.first),dfs(i.second);}
cout << k - res << endl;}
真的没想到并查集也可以写
/**
*author:ZJX
*version:DSU
**/#include<bits/stdc++.h>#include<bits/extc++.h>usingnamespace std;#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)#define _rev(i, a, b) for (int i = (a); i >= (b); --i)#define _for(i, a, b) for (int i = (a); i < (b); ++i)#define _rof(i, a, b) for (int i = (a); i > (b); --i)#define oo 0x3f3f3f3f#define ll long long#define db double#define eps 1e-8#define bin(x) cout << bitset<25>(x) << endl;#define what_is(x) cerr << #x << " is " << x << endl;#define met(a, b) memset(a, b, sizeof(a))#define all(x) x.begin(), x.end()#define pii pair<int, int>constint maxn =2e5+10;int parent[maxn], n, k;intnxt(){int ret;scanf("%d",&ret);return ret;}voidpre_work(){_for(i,1, maxn)parent[i]= i;}intfind(int a){return a == parent[a]? a : parent[a]=find(parent[a]);}voidmerge(int a,int b){
parent[find(a)]=find(b);}signedmain(){int n =nxt(), k =nxt();int res =0;pre_work();_rep(i,1, k){int a =nxt(), b =nxt();if(find(a)!=find(b)){merge(a, b);
res++;}}
cout << k - res << endl;}