傳送門
根據題目要求,兩個相鄰的點不能同時佔據,因此,如果要覆蓋所有路徑,最短距離為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條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路...