This commit is contained in:
Zengtudor 2024-10-12 19:29:37 +08:00
parent 79d6da2e95
commit eac90c8b50
97 changed files with 2148181 additions and 2148160 deletions

View File

@ -1,3 +1,4 @@
//#define NDEBUG
#include <iostream> #include <iostream>
#include <unistd.h> #include <unistd.h>
#include <vector> #include <vector>
@ -5,6 +6,12 @@
#include <array> #include <array>
#include <queue> #include <queue>
#include <algorithm> #include <algorithm>
#define NV(v)#v<<" : "<<(v)
#ifdef NDEBUG
#define DEBUG(code)
#else
#define DEBUG(code){code}
#endif
using ll = long long; using ll = long long;
static const ll max_n = 1e4+5; static const ll max_n = 1e4+5;
@ -26,30 +33,44 @@ void bfs(){
for(ll i{1};i<=n;i++){ for(ll i{1};i<=n;i++){
if(vis[i])continue; if(vis[i])continue;
colors[i]=1; colors[i]=1;
DEBUG(
os<<"colors["<<i<<"]="<<1<<'\n';
)
color_sum[colors[i]]++; color_sum[colors[i]]++;
vis[i]=true; vis[i]=true;
q.push({i,colors[i]}); q.push({i,colors[i]});
while(!q.empty()){ while(!q.empty()){
const auto front = q.front(); const auto front = q.front();
q.pop(); q.pop();
for(const auto i:map[front.now]){ for(const auto i:map[front.now]){
DEBUG(
os<<"----------------------------------\n";
)
const Status next_status{i,((front.color&1)+1)}; const Status next_status{i,((front.color&1)+1)};
DEBUG(
os<<NV(front.now)<<' '<<NV(front.color)<<'\n'<<NV(next_status.now)<<' '<<NV(next_status.color)<<"\n>---<\n";
)
if(vis[next_status.now]){ if(vis[next_status.now]){
if(next_status.color!=colors[next_status.color]){ DEBUG(
os<<NV(next_status.now)<<'\n'<<NV(next_status.color)<<'\n'<<NV(colors[next_status.now])<<'\n';
)
if(next_status.color==colors[front.now]){
os<<"Impossible\n"; os<<"Impossible\n";
_exit(0); _exit(0);
} }
continue; continue;
} }
DEBUG(
os<<"colors["<<next_status.now<<"]="<<next_status.color<<'\n';
)
colors[next_status.now]=next_status.color; colors[next_status.now]=next_status.color;
color_sum[colors[next_status.now]]++; color_sum[colors[next_status.now]]++;
vis[next_status.now]=true; vis[next_status.now]=true;
q.push(next_status); q.push(next_status);
// next_loop:;
} }
} }
} }
return;
} }
int main(){ int main(){
is>>n>>m; is>>n>>m;