議員秘密 題解

2022-07-17 07:39:10 字數 2318 閱讀 7894

3.議員秘密

(secret.pas/c/cpp)

【問題描述】

某國有n個議員,大佬xdd要從中選出來一部分一起喝茶談一些事情。某兩個議員之間可能存在矛盾,大佬xdd不希望選出來的這些議員之間有任何矛盾關係,以至於喝喝茶的場面搞得很尷尬。

已知這些議員之間存在m對矛盾關係,你能否幫助大佬xdd計算出他最多可以選出多少個議員來喝茶談事情?

如果聰明的你把議員看成點,把矛盾關係看成無向邊,那麼題目中的資料保證m對矛盾所構成的圖中不存在含有超過3個點的環。(圖1符合要求,圖2則不符合)

【輸入資料】

輸入檔案的第一行是用空格隔開的兩個整數n和m,表示一共有n個議員,這些議員之間有m對矛盾關係。接下來的m行,每行將有一對整數a和b(用空格隔開),表示議員a與議員b有矛盾。輸入資料保證不含重邊和自環。(議員的編號都是從1開始的)

【輸出資料】

輸出一行,包含乙個整數,即大佬xdd最多可以選出多少議員來喝茶談事情。

【輸入輸出樣例】

secret.in

5 61 2

3 21 3

3 53 4

4 5secret.out

【樣例說明】

某國有6個議員,矛盾關係中1 - 2 - 3組成乙個環,3 - 4 - 5組成乙個環,因此只能在這兩個環中分別選乙個議員,並且不能選擇3號議員。

【資料規模與約定】

對於20%的資料,1 ≤ n ≤ 20

對於40%的資料,1 ≤ n ≤ 50

對於100%的資料,1 ≤ n ≤ 200

輸入資料保證合法。

————————————————————我是分割線————————————————————————

dp題目。據說是樹狀(仙人掌???)。

dp[i][j]表示第i個點,選(j==1)或不選(j==0)的情況。

注意題目沒***聯通,有可能是森林。

寫的記憶化搜尋,**如下:

1/*2

problem:

3oj:

4user: s.b.s.

5time:

6memory:

7length:8*/

9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 #include17 #include18 #include19 #include20 #include21 #include22 #include23

#define f(i,j,k) for(register int i=j;i<=k;++i)

24#define m(a,b) memset(a,b,sizeof(a))

25#define ff(i,j,k) for(register int i=j;i>=k;i--)

26#define maxn 210

27#define inf 0x3f3f3f3f

28#define maxm 4001

29#define mod 998244353

30#define local

31using

namespace

std;

32int

read()

35while(ch>='

0'&&ch<='9')

36return x*f;37}

38int

n,m;

39int fa[maxn],dp[maxn][2

];40

bool

tree[maxn][maxn];

41bool

vis[maxn],mp[maxn][maxn];

42 inline void dfs(int

u)4351}

52}53 inline int solve(int u,int

v)54

62else69}

70 cnt=0

;71 f(i,1,n) if(!temp[i]&&fa[i]!=-1&&temp[fa[i]])

72 cnt+=max(solve(0,i),solve(1

,i));

73return dp[v][u]=cnt+1;74

}75}76

intans;

77int

main()

7887 f(i,1

,n)92

}93 cout

94return0;

95 }

3

題解 POJ1187 隕石的秘密

一開始很愉快地想到了乙個dp,然後發現ab c和a bc這兩種情況會重複計數。但其實在列舉a b型時,可以強制令a一定形如 c 這樣就可以避免重複計數了。include include includeusing namespace std const int mod 11380 int l1,l2,...

題解 POJ1187 隕石的秘密

一開始很愉快地想到了乙個dp,然後發現ab c和a bc這兩種情況會重複計數。但其實在列舉a b型時,可以強制令a一定形如 c 這樣就可以避免重複計數了。include include includeusing namespace std const int mod 11380 int l1,l2,...

題解 九省聯考 2018 秘密襲擊 coat

可以將危險程度轉化為 列舉權值 t in 1,w 如果某個連通塊權值不小於 t 的節點個數不小於 k 個那麼造成 1 的貢獻。考慮 dp 令 f 表示以 u 為根子樹中包含 u 的連通塊,有 j 個權值不小於 i 的節點的方案數。轉移就是前兩維列舉,第三維做揹包。不妨令 f z sum limits...