洛谷P1330封鎖陽光大學

2021-10-21 10:07:56 字數 1271 閱讀 7817

傳送門

根據題目要求,兩個相鄰的點不能同時佔據,因此,如果要覆蓋所有路徑,最短距離為2的兩個點必須狀態相同(同時佔據或同時不佔據)。

因此,使用dfs進行遍歷,對每個點給乙個標記(1或-1),如果當前點為1,那麼下乙個點就為-1,如果下乙個點已有標記,且不為-1,那就不可能實現完全佔據,輸出impossible。如果無標記,則繼續dfs。最後統計1和-1的數量,哪個少選擇哪個。

題目中沒說無向圖是個連通圖,因此需要多次dfs。

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

10005

;const

int m =

100005

;const

int mod =

376544743

;typedef

long

long ll;

typedef pair<

int,

int>pii;

struct edge

e[m *2]

;int n, m, eid, p[n]

;void

init()

void

insert

(int u,

int v)

int st[n]

;//每個點的標記

bool succ =1;

//判斷是否能同時佔據

int num1, num2;

//記錄1和-1的數量

void

dfs(

int u,

int x)if(

!st[v]

)dfs

(v,-x);}

}int

main()

int ans =0;

for(

int i =

1; i <=

1; i++)if

(succ) cout << ans;

else

puts

("impossible");

return0;

}

洛谷 P1330 封鎖陽光大學

曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上...

洛谷 P 1330 封鎖陽光大學

題目描述 曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與...

洛谷 P1330 封鎖陽光大學

曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是 一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路...