Submission #283676

#TimeUsernameProblemLanguageResultExecution timeMemory
283676AMO5Izlet (COI19_izlet)C++17
100 / 100
814 ms74744 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); } void reset(int n){ par=vi(); 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; par[v]=u; } bool sameset(int u, int v){ return ((u=rt(u))==(v=rt(v))); } }; DSU dsu(1); void dfs(int pr, int st, int u, int p){ if(a[pr][u]==a[st][u]){ //cerr<<pr<<" "<<st<<" "<<u<<" "<<p<<" : "<<a[st][u]<<"\n"; dsu.merge(pr,u); return; } for(int v:adj[u]){ if(v==p)continue; dfs(pr,st,v,u); } } 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.reset(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(j,i); adj[i].eb(j); adj[j].eb(i); dsu.merge(i,j); } } } for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ if(i>j&&a[i][j]==2){ if(dsu.sameset(i,j))continue; edges.eb(j,i); adj[i].eb(j); adj[j].eb(i); dsu.merge(i,j); } } } dsu.reset(n); for(int i=1; i<=n; i++){ for(int j:adj[i]){ dfs(i,j,j,i); } } for(int i=1; i<=n; i++)cout<<dsu.rt(i)<<" "; cout<<"\n"; for(int i=0; i<sz(edges); i++){ cout<<edges[i].fi<<" "<<edges[i].se<<"\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...