Submission #283307

#TimeUsernameProblemLanguageResultExecution timeMemory
283307AMO5Izlet (COI19_izlet)C++17
18 / 100
611 ms53496 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define eb emplace_back #define mt make_tuple #define all(x) (x).begin(), (x).end() #define sz(x) int(x.size()) #define MOD 1000000007 typedef long long ll; typedef pair <int, int> ii; typedef pair <ll, ll> pll; typedef vector<int> vi; typedef vector<ll> vll; typedef long double ld; const ll INF=63; const int mxn=3e3+5; bool DEBUG=0; int a[mxn][mxn],n,subt; int col[mxn]; bool vis[mxn]; vector<ii>edges; vi adj[mxn]; struct DSU{ vi par; DSU(int n){ for(int i=0; i<=n; i++)par.eb(i); } int rt(int u){ if(u!=par[u])par[u]=rt(par[u]); return par[u]; } void merge(int u, int v){ u=rt(u); v=rt(v); if(u==v)return; if(rand()%2)swap(u,v); par[v]=u; } bool sameset(int u, int v){ return ((u=rt(u))==(v=rt(v))); } }; void dfs(int u, int p=0){ vis[u]=1; for(int v:adj[u]){ if(v==p)continue; if(!vis[v])dfs(v,u); } } void dfs2(int u, int p, int c){ col[u]=c; vis[u]=1; for(int v:adj[u]){ if(v==p)continue; if(!vis[v])dfs2(v,u,c); } } //subtask 1 int main() { ios_base::sync_with_stdio(0); cin.tie(0); //freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); cin>>subt>>n; DSU dsu(n); for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ cin>>a[i][j]; if(i>j&&a[i][j]==1){ if(dsu.sameset(i,j))continue; edges.eb(i,j); adj[i].eb(j); adj[j].eb(i); dsu.merge(i,j); } } } if(subt!=1)return 0; vi poor,cc; for(int i=1; i<=n; i++){ if(sz(adj[i])==0)poor.eb(i); else if(!vis[i]){ cc.eb(i); dfs(i); } } int c=0; fill(vis+1,vis+n+1,0); for(int i=0; i<sz(cc); i++){ dfs2(cc[i],0,c); c=1-c; if(i)edges.eb(cc[i],cc[i-1]); } if(sz(cc)){ for(int x:poor){ col[x]=!col[cc[0]]; edges.eb(x,cc[0]); } for(int i=1; i<=n; i++)cout<<col[i]+1<<" "; cout<<"\n"; for(ii x:edges){ cout<<x.fi<<" "<<x.se<<"\n"; } }else{ //all 2 for(int i=1; i<=n; i++)cout<<i%2+1<<" "; cout<<"\n"; for(int i=1; i<n; i++){ cout<<i<<" "<<i+1<<"\n"; } } } // READ & UNDERSTAND // ll, int overflow, array bounds, memset(0) // special cases (n=1?), n+1 (1-index) // do smth instead of nothing & stay organized // WRITE STUFF DOWN
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...