外太空旅行

2021-10-02 11:19:18 字數 1109 閱讀 7821

題目描述

在人類的觸角伸向銀河系的邊緣之際,普通人上太空旅行已經變得稀鬆平常了。某理科試驗班有n個人,現在班主任要從中選出盡量多的人去參加一次太空旅行活動。 可是n名同學並不是和平相處的。有的人,比如小a和小b整天狼狽為奸,是好朋友;但還有的人,比如(政治敏感)和(政治敏感)就水火不相容。這n名同學,由於是理科生,都非常的理性,所以「朋友的朋友就是朋友」和「敵人的朋友就是敵人」這兩句話對這些同學無效。換句話說,有可能小a和小b是朋友,小b和小c是朋友,但是小a和小c兩人勢如水火。 任意兩個人之間要不就是敵人,要不就是朋友。 因為在太空船上發生人員鬥毆事件是很惡劣也很危險的,因此選出來參加旅行活動的同學必須互相之間都是朋友。你的任務就是確定最多可以選多少人參加旅行。

輸入格式

第一行乙個整數n(1<=n<=50)。所有的同學按照1~n編號。 接下來若干行,每行兩個用空格隔開的整數a, b(1<=a,b<=n),表示a和b是朋友。 注意:如果乙個數對(x,y)(或者(y,x))沒有在檔案**現,那麼編號為x和y的兩個同學就是敵人。

輸出格式

乙個數,即最多可以選多少人參加活動。

輸入輸出樣例

輸入 #1複製

41 2

2 33 1

1 4輸出 #1複製

3明顯最大團問題。

主流做法就是狀壓dp或者隨機化。

狀壓dp複雜度為 n ^ 2 * 2 ^ n ,這道題目顯然不行,所以我們隨機化即可。

ac**:

#pragma gcc optimize("-ofast","-funroll-all-loops")

#include

//#define int long long

using namespace std;

const

int n=55;

int n,g[n]

[n],a,b,t[n]

,res[n]

,cnt,ans;

inline

intcheck

(int x)

signed

main()

ans=

max(ans,cnt);}

cout

}

luogu P4212 外太空旅行

luogu p4212 外太空旅行 題解為什麼都是隨機化或bitset的呀 這題明明就是最大團板子題啊 是不是對最大團問題有什麼誤解 搜尋加3個剪枝沒有壓力跑過去了呀 沒開o2 開o2 首先講講怎麼搜尋吧 我們可以考慮設立 f i 表示只考慮標號 i 的點所能構成的最大團的點數 那麼我們就可以從 n...

BZOJ 3632 外太空旅行 最大團

include using namespace std const int n 55 int ans,f n set n n a n n bool dfs int sz,int dep for int i 1 i sz i return0 int main printf d ans return 0...

洛谷4212 外太空旅行(模擬退火)

點此看題面 大致題意 給你一張圖,讓你從中選取最多的點,使這些點所構成的是完全圖。這道題可以用模擬退火來亂搞 或者隨機化 dfs 大體就是搞乙個序列,定義其價值為從左往右 見到合法點立刻選所能選出的點數。然後模擬退火,求出最大價值即為答案。include define tp template def...