題目傳送門
這是基礎課原題 acwing 285. 沒有上司的舞會
#include using namespace std;
const int n = 1510; //因為題目明確是有向圖,無需m=n*2
int h[n], e[n], ne[n], idx; //鄰接表
int f[n][2];
/** 集合: 以結點i為 根節點 的子樹,在 i 上放置哨兵(1) 和不放哨兵(0) 的方案
狀態表示: 方案中,放置的哨兵數量 最少
狀態計算:
*/bool st[n]; //用於判斷是不是根節點
//鄰接表模板
void add(int a, int b)
void dfs(int u)
}int main()
}//有向圖,需要找到出根
int root = 0;
while (st[root]) root++;
//從根開始
dfs(root);
//輸出 兩個結果取個 min
printf("%d\n", min(f[root][0], f[root][1]));
}return 0;
}
藍書 323 戰略遊戲
f i 2 以i為根的子樹,i節點不放置士兵滿足條件的最小放置士兵數量。樹形dp一下就行 比較奇怪的是 讀入scanf d d u,m 是對的 scanf d s u,s int m s 2 0 這樣就會超時。有懂得大佬解答下嗎。include using namespace std typedef...
TYVJ3097 3121 3369 戰略遊戲
給一棵n個節點的樹,在點上放置士兵,每個士兵能監視周圍的所有邊,詢問最少放置的士兵數dp i,0 表示在 i點不放 士兵合法 的最小放 置數dp i,1 表示在 i點放士 兵合法的 最小放置 數 dp i,0 d p so n i 1 dp i 1 dp son i 1 d p so n i 0 m...
P2016 戰略遊戲
樹形dp f u 0 表示 uf u 0 表示u f u 0 表示u 號節點不放士兵,以x為根的子樹需要的最少士兵數。f u 1 表示 uf u 1 表示u f u 1 表示u 號節點放士兵,以x為根的子樹需要的最少士兵數。由於我們定義的是將其完全覆蓋,則我們不需要考慮父親節點,為什麼?當我們已經回...