我自己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結束...