Submission #1177934

#TimeUsernameProblemLanguageResultExecution timeMemory
1177934AldkConnecting Supertrees (IOI20_supertrees)C++20
100 / 100
135 ms30148 KiB
#include "supertrees.h" #include<bits/stdc++.h> #define pb push_back #define F first #define S second #define str string #define ll long long #define ull unsigned ll #define ld long double #define pll pair<ll,ll> #define plll pair<ll,pll> #define pllll pair<pll,pll> #define pii pair<int,int> #define vl vector<ll> #define vll vector<pll> #define vlll vector<plll> #define vllll vector<p4> #define vi vector<int> #define vii vector<pii> #define sz(x) (ll)(x).size() #define fr front() #define tp top() #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define ins insert #define m_p make_pair #pragma GCC target( "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") using namespace std; const ld pi=acos(-1.0); const ll e5=1e5, e6=1e6, e9=1e9; const ll inf=1e18; const ll mod=998244353; const ll MOD=106710087877475399; const ll N=1e3+10; const ll M=2e5+10; const ld eps=1e-9; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll bpm(ll x,ll y,ll m){if(y==0)return 1%m;ll p=bpm(x,y/2,m); if(y%2==0)return p*p%m;else return p*p%m*x%m;} ll bp(ll x,ll y){if(y==0)return 1;ll p=bp(x,y/2); if(y%2==0)return p*p;else return p*p*x;} bool u[N]; vl g[N],v1; vector<vl> v2; void dfs(ll v){ u[v]=1; v1.pb(v); for(ll to:g[v]) if(!u[to]) dfs(to); } int construct(std::vector<std::vector<int>> p) { int n = p.size(); std::vector<std::vector<int>> answer; for (int i = 0; i < n; i++) { vector<int> row(n,0); answer.push_back(row); } for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ if(p[i][j]!=0) g[i].pb(j); if(p[i][j]==3) return 0; } } for(ll i=0;i<n;i++){ if(u[i]) continue; v1.clear(); dfs(i); for(ll x:v1){ for(ll y:v1){ if(p[x][y]==0) return 0; } } v2.pb(v1); } for(ll i=0;i<n;i++) g[i].clear(), u[i]=0; for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ if(p[i][j]==1) g[i].pb(j); } } for(ll i=0;i<sz(v2);i++){ vl vt; for(ll j:v2[i]){ if(u[j]) continue; v1.clear(); dfs(j); for(ll x:v1){ for(ll y:v1){ if(p[x][y]!=1) return 0; } } for(ll k=1;k<sz(v1);k++) answer[v1[k-1]][v1[k]]=answer[v1[k]][v1[k-1]]=1; vt.pb(v1[0]); } ll s=sz(vt); if(s>2){ for(ll j=0;j+1<sz(vt);j++) answer[vt[j]][vt[j+1]]=answer[vt[j+1]][vt[j]]=1; answer[vt[0]][vt[s-1]]=answer[vt[s-1]][vt[0]]=1; }else if(s==2) return 0; } build(answer); 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...