BZOJ 2466 中山市選2009 樹

2022-05-20 23:00:39 字數 1470 閱讀 4889

題解:  $ 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暴...