제출 #456186

#제출 시각아이디문제언어결과실행 시간메모리
456186Khizri슈퍼트리 잇기 (IOI20_supertrees)C++17
40 / 100
277 ms26128 KiB
#include "supertrees.h" #include <bits/stdc++.h> #include <vector> using namespace std; #define ll long long #define pb push_back #define F first #define S second #define INF 1e18 #define all(v) (v).begin(),(v).end() #define rall(v) (v).rbegin(),(v).rend() #define pii pair<int,int> #define pll pair<ll,ll> #define OK cout<<"Ok"<<endl; #define MOD (ll)(1e9+7) vector<std::vector<int>> ans; vector<std::vector<int>>arr; int color[1005],n,k,say,t; bool qq=false; void dfs(int u){ t=u; color[u]=k; say++; for(int i=0;i<n;i++){ if(u!=i&&arr[u][i]>0&&!color[i]){ ans[u][i]=1; ans[i][u]=1; dfs(i); } } } int construct(std::vector<std::vector<int>> p) { arr=p; n = arr.size(); for (int i = 0; i < n; i++) { std::vector<int> row; row.resize(n); ans.push_back(row); } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(arr[i][j]==2){ goto loop; } } } for(int i=0;i<n;i++){ if(!color[i]){ ++k; dfs(i); } } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(arr[i][j]==1&&color[i]!=color[j]){ return 0; } if(arr[i][j]==0&&color[i]==color[j]){ return 0; } } } build(ans); return 1; loop:; for(int i=0;i<n;i++){ if(!color[i]){ say=0; ++k; dfs(i); if(say==2){ return 0; } else if(say>2){ ans[i][t]=1; ans[t][i]=1; } } } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(arr[i][j]>0&&color[i]!=color[j]){ return 0; } if(arr[i][j]==0&&color[i]==color[j]){ return 0; } } } build(ans); 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...