NOIP2003 傳染病控制( 貪心 dfs)

2021-09-06 17:27:35 字數 2283 閱讀 6073

我自己yy了個貪心演算法,在某oj 0msac~。然後去wikioi提交,呵呵,原來是之前oj的資料太弱給我水過了,我暈。

我之前的想法是在這棵樹上維護sum,然後按時間來割邊,每一時刻割已經感染的人所連線的sum值最大的邊。,,才60分。。

#include #include #include #include #include #include using namespace std;

#define rep(i, n) for(int i=0; i<(n); ++i)

#define for1(i,a,n) for(int i=(a);i<=(n);++i)

#define for2(i,a,n) for(int i=(a);i<(n);++i)

#define for3(i,a,n) for(int i=(a);i>=(n);--i)

#define for4(i,a,n) for(int i=(a);i>(n);--i)

#define cc(i,a) memset(i,a,sizeof(i))

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

#define read(a) a=getnum()

#define print(a) printf("%d", a)

#define debug(x) printf("debug: %d\n", x)

#define printarr(a, x)

inline int getnum()

const int n=305;

int ihead[n], inext[n*n], to[n*n], cnt, sum[n], n, m, fa[n];

bool vis[n], die[n], vis2[n];

inline void pushup(int x)

inline void add(int u, int v)

void build(const int &x)

int main()

vis[u]=vis[maxi]=die[maxi]=false;

} if(flag) break;

} for1(i, 1, n) if(die[i]) ans++;

print(ans);

return 0;

}

好吧,看題解。。

恩,,,深搜,因為貪心那個建圖的話,不能處理環 囧。

(或許某天yy出處理環的貪心0.0)

(不行,我得思考一下我的貪心,好像似乎可行。

先放出我後邊寫的dfs。。

#include #include #include #include #include #include using namespace std;

#define rep(i, n) for(int i=0; i<(n); ++i)

#define for1(i,a,n) for(int i=(a);i<=(n);++i)

#define for2(i,a,n) for(int i=(a);i<(n);++i)

#define for3(i,a,n) for(int i=(a);i>=(n);--i)

#define for4(i,a,n) for(int i=(a);i>(n);--i)

#define cc(i,a) memset(i,a,sizeof(i))

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

#define read(a) a=getnum()

#define print(a) printf("%d", a)

#define debug(x) printf("debug: %d\n", x)

#define printarr(a, x)

inline int getnum()

const int n=305;

int ihead[n], inext[n*n], to[n*n], fa[n], d[n], cnt, n, m, ans=~0u>>1;

bool die[n], vis[n];

inline void add(int u, int v)

void build(const int &x)

}void dfs(const int &dis, int num)

int main()

noip 2003 傳染病控制

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

NOIP2003 傳染病控制

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

NOIP 2003傳染病控制

思路 1.dfs一遍,求出每個點的size,fa,deep 2.按照deep將每個點存入vector中 3.按照deep進行dffs求解答案 dffs時切斷某個點與fa的連線表示該點打上標記,表示不被感染,並減去該點size,每次進入下一層時,掃fa,如果fa被標記,則該點也被標記。最後dffs結束...