題解: $ n<=100 $ 急忙叫隊友是不是暴力題啊....
qko:"好像我會o(n)"
我:"好巧,我也會o(n)的,那就莽吧"
四個狀態 :
$ dp1[x][0] $表示不摁且這個節點不亮的個數
$ dp1[x][1] $表示不摁且這個節點亮的個數
$ dp2[x][0] $表示摁且這個節點不亮的個數
$ dp2[x][1] $表示摁且這個節點亮的個數
#include #include #include #include #include #include #include #include #include #include #define mp make_pair
#define pb push_back
#define pii pair#define link(x) for(edge *j=h[x];j;j=j->next)
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
const int maxn=3e5+10;
const double eps=1e-8;
#define ll long long
using namespace std;
const int inf=1e6;
struct edgee[maxn<<1],*h[maxn],*o=e;
void add(int x,int y)
ll read()
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}int dp1[maxn][2],dp2[maxn][2];
bool vis[maxn];
int n;
void dfs(int x,int pre)
if(flag){
// coutsubmit: 1413 solved: 613
[submit][status][discuss]圖論中的樹為乙個無環的無向圖。給定一棵樹,每個節點有一盞指示燈和乙個按鈕。如果節點的按扭被按了,那麼該節點的燈會從熄滅變為點亮(當按之前是熄滅的),或者從點亮到熄滅(當按之前是點亮的)。並且該節點的直接鄰居也發生同樣的變化。
開始的時候,所有的指示燈都是熄滅的。請程式設計計算最少要按多少次按鈕,才能讓所有節點的指示燈變為點亮狀態。
輸入檔案有多組資料。
輸入第一行包含乙個整數n,表示樹的節點數目。每個節點的編號從1到n。
輸入接下來的n – 1行,每一行包含兩個整數x,y,表示節點x和y之間有一條無向邊。
當輸入n為0時,表示輸入結束。
對於每組資料,輸出最少要按多少次按鈕,才能讓所有節點的指示燈變為點亮狀態。每一組資料獨佔一行。
31 2
1 30
1對於100%的資料,滿足1 <= n <=100。
bzoj2466 中山市選2009 樹
同上一題。應該可以樹形dp,然而我不會。include include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i t i d...
bzoj2466 中山市選2009 樹
題目描述 bz題解 1 高消。直接列異或方程組高消即可。include include include include using namespace std const int n 105 template inline void read t x while ch 0 ch 9 x f c in...
2466 中山市選2009 樹
題目鏈結 題目大意 給定一棵樹,每個點有乙個0 1的權,一次操作可以使得x和x的直接鄰居點權 1,初始均為0,求最少多少次操作可以全部變成1 題解 樹形dp可以o n 解決 但這不重要 考慮對每個點列出乙個xor方程,這樣就可以高斯消元了 但是有可能有自由元 暴力列舉代入計算 我的收穫 gauss暴...