Submission #1135683

#TimeUsernameProblemLanguageResultExecution timeMemory
1135683AvianshIzlet (COI19_izlet)C++20
18 / 100
259 ms36296 KiB
#include <bits/stdc++.h> using namespace std; void dfs(int st,vector<int>(&g)[],int p, int col[],int s){ col[st]=s; for(int i : g[st]){ if(i==p) continue; dfs(i,g,st,col,s); } } struct dsu{ vector<int>root; vector<int>siz; vector<set<int>>childs; dsu(int n){ root=vector<int>(n); siz=vector<int>(n,1); childs=vector<set<int>>(n); iota(root.begin(),root.end(),0); for(int i = 0;i<n;i++){ childs[i].insert(i); } } bool unite(int x, int y){ x=findRoot(x); y=findRoot(y); if(x==y){ return 0; } if(siz[x]<siz[y]){ swap(x,y); } root[y]=x; siz[x]+=siz[y]; for(int i : childs[y]){ childs[x].insert(i); } return 1; } int findRoot(int x){ if(x==root[x]){ return x; } return root[x]=findRoot(root[x]); } }; signed main(){ ios::sync_with_stdio(0); cin.tie(0); int s; cin >> s; assert(s==1); int n; cin >> n; int grid[n][n]; vector<int>g[n]; dsu ds(n); for(int i = 0;i<n;i++){ for(int j = 0;j<n;j++){ cin >> grid[i][j]; if(grid[i][j]==1&&i!=j){ ds.unite(i,j); } } } set<int>vis; for(int i = 0;i<n;i++){ if(vis.find(ds.findRoot(i))==vis.end()){ vis.insert(ds.findRoot(i)); int las = -1; for(int i : ds.childs[ds.findRoot(i)]){ if(las==-1){ las=i; continue; } g[i].push_back(las); g[las].push_back(i); las=i; } } } int col[n]; fill(col,col+n,0); dfs(0,g,-1,col,1); for(int i = 1;i<n;i++){ if(col[i]){ continue; } dfs(i,g,-1,col,2); g[0].push_back(i); g[i].push_back(0); } for(int i : col){ cout << i << " "; } cout << "\n"; for(int i = 0;i<n;i++){ for(int j : g[i]){ if(j>i){ cout << i+1 << " " << j+1 << "\n"; } } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...