20191031

mac2024-08-18  61

#include<bits/stdc++.h> #define ll long long #define maxn 10010 using namespace std; int n,m,k; struct edge { int end,next; }e[maxn]; int tot; int head[maxn]; void add(int x,int y) { e[++tot].next=head[x]; e[tot].end=y; head[x]=tot; } int color[maxn]; int cnt=0; void dfs(int now) { color[now]=cnt; for (int i=head[now];i;i=e[i].next) { int to=e[i].end; if (!color[to]) dfs(to); } } void subtask1() { for (int i=1;i<=n;i++) if(!color[i]) cnt++,dfs(i); cout<<cnt<<endl; } bool vis[maxn]; bool dfss(int baba,int now) { vis[now]=1; for (int i=head[now];i;i=e[i].next) { int to=e[i].end; if (to!=baba&&!vis[to]) return dfs(now,to); if (to!=baba&&vis[to]) return true; } return false; } bool forest() { for (int i=1;i<=n;i++) if(!vis[i]) if (dfss(0,i)) return false else cnt++; cout<<cnt+k; return true; } int main() { //freopen(".in","r",stdin); //freopen(".out","w",stdout); cin>>n>>m>>k; for (int i=1;i<=m;i++) { int a,b,; scanf("%d%d",&a,&b); add(a,b); add(b,a); } if (k==0) { subtask1(); return 0; } if (forest()) { return 0; } return 0; }

 

最新回复(0)