Submission #1213634

#TimeUsernameProblemLanguageResultExecution timeMemory
1213634hengliaoConnecting Supertrees (IOI20_supertrees)C++20
100 / 100
155 ms62216 KiB
#include "supertrees.h" #include<bits/stdc++.h> using namespace std; #define F first #define S second #define pb push_back #define vll vector<ll> #define pll pair<ll, ll> typedef long long ll; namespace{ const ll mxN=1005; ll n; ll timer1, timer2; vll adj1[mxN]; vll adj2[mxN]; bool visited[mxN]; vll v1[mxN], v2[mxN]; ll id1[mxN], id2[mxN]; ll ans[mxN][mxN]; void dfs1(ll cur){ if(visited[cur]) return; visited[cur]=1; id1[cur]=timer1; // v1[id1[cur]].pb(cur); for(auto &it:adj1[cur]){ dfs1(it); } } void dfs2(ll cur){ if(visited[cur]) return; visited[cur]=1; id2[cur]=timer2; v2[id2[cur]].pb(cur); for(auto &it:adj2[cur]){ dfs2(it); } } void add_edge(ll a, ll b){ ans[a][b]=1; ans[b][a]=1; } } int construct(vector<vector<int>> p) { n = p.size(); memset(ans, 0, sizeof(ans)); for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ if(i==j) continue; if(p[i][j]>0){ adj1[i].pb(j); adj1[j].pb(i); } if(p[i][j]==1){ adj2[i].pb(j); adj2[j].pb(i); } } } memset(visited, 0, sizeof(visited)); timer1=0; for(ll i=0;i<n;i++){ if(!visited[i]){ dfs1(i); timer1++; } } memset(visited, 0, sizeof(visited)); timer2=0; for(ll i=0;i<n;i++){ if(!visited[i]){ dfs2(i); timer2++; } } for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ if(i==j) continue; if(p[i][j]==3) return 0; else if(p[i][j]==0){ if(id1[i]==id1[j]) return 0; } else if(p[i][j]==2){ if(id2[i]==id2[j]) return 0; } else if(p[i][j]==1){ if(id2[i]!=id2[j]) return 0; } } } for(ll i=0;i<timer2;i++){ v1[id1[v2[i][0]]].pb(v2[i][0]); for(ll j=1;j<(ll) v2[i].size();j++){ add_edge(v2[i][0], v2[i][j]); } } for(ll i=0;i<timer1;i++){ if((ll) v1[i].size()==1LL) continue; if((ll) v1[i].size()==2LL) return 0; for(ll j=0;j<(ll) v1[i].size();j++){ add_edge(v1[i][j], v1[i][(j+1)%((ll) v1[i].size())]); } } vector<vector<int>> re(n, vector<int>(n)); for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ re[i][j]=(int) ans[i][j]; } } build(re); return 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...