題目大意:給定乙個 n 個點,m 條邊的無向圖,現在要選出圖中的乙個頂點集合,使得集合種的頂點不直接相鄰,且這張圖的所有邊都被該頂點集合覆蓋,求該頂點集合大小的最小值,若不能完成覆蓋,則輸出 impossible。
題解:由於要求集合中頂點不能相鄰,且每條邊都要被覆蓋,則對於任意一條邊來說,連線該邊的兩個頂點必有且只有乙個在該集合中。對於這種相鄰頂點不能在同乙個集合中的性質,可以考慮對圖進行染色的操作,即:相鄰頂點的顏色不同,看是否可以用兩個顏色染完整張圖而不發生衝突,染色時順便記錄下每種顏色的頂點個數,個數少的即為答案貢獻的一部分。
**如下
#include using namespace std;
const int maxv=1e4+10;
const int maxe=1e5+10;
inline int read()while(!isdigit(ch));
dowhile(isdigit(ch));
return f*x;
}struct nodee[maxe<<1];
int tot=1,head[maxv];
int n,m,ans,sum[2];
bool vis[maxv],cor[maxv];
inline void add_edge(int from,int to),head[from]=tot;
}void read_and_parse()
}bool dfs(int u,int c)
void solve()
ans+=min(sum[0],sum[1]);
} printf("%d\n",ans);
}int main()
洛谷 P1330 封鎖陽光大學
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上...
洛谷 P 1330 封鎖陽光大學
題目描述 曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與...
洛谷 P1330 封鎖陽光大學
曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是 一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路...