P1041 传染病控制
Posted liulex
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1041 传染病控制相关的知识,希望对你有一定的参考价值。
https://www.luogu.org/problem/P1041
#include<bits/stdc++.h> using namespace std; #define int long long #define sc(x) scanf("%lld",&x); const int maxn = 1000; int n,m,tot=1,ans=5000; int c[maxn]; vector<int>son[maxn]; int G[maxn][maxn]; void dfs(int i,int fa) for(int j=1; j<=n; j++) int x=G[i][j]; //cout<<i<<‘ ‘<<fa<<‘\n‘; if(x!=0) x=j; // cout<<i<<" zenmehuishi "<<x<<‘\n‘; if(x!=fa) son[i].push_back(x); dfs(x,i); void solve(int p) bool f=0; if(ans<=tot) return; for(int i=1; i<=n; i++) if(c[i]==p) for(int j=0; j<son[i].size(); j++) f=1; tot++; c[son[i][j]]=p+1; tot--; for(int i=1; i<=n; i++) if(c[i]==p+1) c[i]=0;///剪掉 solve(p+1); c[i]=p+1; ///儿子的儿子 tot++; for(int i=1; i<=n; i++) if(c[i]==p+1) c[i]=0; tot--; if(!f)//标记是否有儿子 ans=min(ans,tot); return; signed main() int x,y; sc(n); sc(m); c[1]=1; for(int i=1; i<=m; i++) sc(x); sc(y); G[x][y]=1; G[y][x]=1; dfs(1,-1); /* for(int i=1; i<=n; i++) cout<<son[i].size()<<‘ ‘; */ solve(1); cout<<ans<<‘\n‘; return 0;
以上是关于P1041 传染病控制的主要内容,如果未能解决你的问题,请参考以下文章