NOIP 2003傳染病控制

2022-08-20 00:48:08 字數 1206 閱讀 9135

思路:1.dfs一遍,求出每個點的size,fa,deep;

2.按照deep將每個點存入vector中;

3.按照deep進行dffs求解答案;

dffs時切斷某個點與fa的連線表示該點打上標記,表示不被感染,並減去該點size,每次進入下一層時,掃fa,如果fa被標記,則該點也被標記。

最後dffs結束的狀態為 搜到比最深deep更深的一層,或搜到某層時該層的點已全部被打上標記。

記錄dffs出的最小答案,輸出

完整ac **

#include

#include

#include

using

namespace

std;

intn,m,ans;

struct

nodee[

805];

int head[305],cnt,fa[305],siz[305],deep[305],madep,in[305

];vector

k[305

];inline

void add(int

from,int

to);

head[

from]=cnt;

}void dfs(int x,int f,int

dep)

}void dffs(int dep,int

now)

for(int i=0;ii)

if(in

[fa[k[dep][i]]])

in[k[dep][i]]=1

;

else

in[k[dep][i]]=0

;

bool f=1

;

for(int i=0;ii)

if(!in[k[dep][i]])f=0

;

if(f)

for(int i=0;ii)

}int

main()

dfs(

1,0,1

);

for(int i=1;i<=n;++i)

k[deep[i]].push_back(i);

ans=n;

dffs(

2,n);

printf("%d

",ans);

return0;

}

noip 2003 傳染病控制

問題背景 近來,一種新的傳染病肆虐全球。蓬萊國也發現了零星感染者,為防止該病在蓬萊國大範圍流行,該國 決定不惜一切代價控制傳染病的蔓延。不幸的是,由於人們尚未完全認識這種傳染病,難以準確判別病毒攜帶者,更沒有研製出疫苗以保護易感人群。於是,蓬萊國 的疾病控制中心決定採取切斷傳播途徑的方法控制疾病傳播...

NOIP2003 傳染病控制

純搜尋題 一開始思路比較混亂,但是仔細想想便能得出正解。我們預處理出每一棵子樹的大小 每一層的兒子們,之後進行一次dfs,暴力列舉刪除每一棵子樹,同時更新答案,同時注意標記是否刪除。搜尋完成後回溯。最終就能得出答案。1 include 2 using namespace std 3int n,m,a...

noip2003傳染病控制 2008 11 5

noip2003傳染病控制 2008.11.5 小結 1.這道題,我的方法普遍的要快很多,以空間換時間,我先把他們的關係用不同的陣列存起來,包括每個人的前面,每個人的後面,都存了下來,算是對資料的初始化吧。包括每個人在第幾層,然後一層一層的直接呼叫。好的資料結構真的很重要,載運算前,對資料的處理,真...