# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
117052 | 2019-06-14T14:15:23 Z | pavel | Izlet (COI19_izlet) | C++14 | 2000 ms | 43228 KB |
#include <cstdio> #include <queue> #include <vector> using namespace std; const int MAXN = 3003; int t,n; int colors[MAXN][MAXN]; bool done[MAXN], d2[MAXN][MAXN]; vector<int> graph[MAXN]; int c[MAXN], par[MAXN], dep[MAXN]; void make_tree(){ vector<int> ocs; for(int i=0;i<n;++i){ if(!done[i]){ done[i]=true; for(int j=i+1;j<n;++j){ if(!done[j] && colors[i][j]==1){ done[j]=true; graph[i].push_back(j); graph[j].push_back(i); } } ocs.push_back(i); } } for(int i=0;i<ocs.size();++i){ for(int j=i+1;j<ocs.size();++j){ if(colors[ocs[i]][ocs[j]]==2 && !d2[ocs[i]][ocs[j]]){ vector<int> tc; tc.push_back(ocs[i]); tc.push_back(ocs[j]); for(int k=j+1;k<ocs.size();++k){ if(colors[ocs[i]][ocs[k]]==2 && colors[ocs[j]][ocs[k]]==2){ tc.push_back(ocs[k]); } } for(int k=0;k<tc.size();++k){ if(k){ graph[tc[k]].push_back(tc[0]); graph[tc[0]].push_back(tc[k]); } for(int l=0;l<k;++l){ d2[tc[k]][tc[l]]=d2[tc[l]][tc[k]]=true; } } } } } } void color_tree(){ queue<int> todo; todo.push(0); par[0]=-1; dep[0]=0; c[0]=1; int nfc=2; while(!todo.empty()){ int curr = todo.front(); todo.pop(); for(int i:graph[curr]){ if(!c[i]){ par[i]=curr; dep[i]=dep[curr]+1; int p=curr; while(p!=-1 && colors[p][curr]!=colors[p][i]) curr=par[curr]; if(p==-1){ int d=MAXN; for(int j=0;j<n;++j){ if(c[j] && colors[j][i]==colors[j][curr] && d<dep[j]){ d=dep[j]; c[i]=c[j]; } } }else{ c[i]=c[curr]; } if(!c[i]) c[i]=nfc++; todo.push(i); } } } } int main(){ scanf("%d%d", &t, &n); for(int i=0;i<n;++i) for(int j=0;j<n;++j) scanf("%d", &colors[i][j]); make_tree(); color_tree(); for(int i=0;i<n;++i){ printf("%d ", c[i]); } puts(""); for(int i=0;i<n;++i){ for(auto j:graph[i]){ if(i<j) printf("%d %d\n", i+1, j+1); } } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Execution timed out | 2033 ms | 640 KB | Time limit exceeded |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Execution timed out | 2021 ms | 43228 KB | Time limit exceeded |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Execution timed out | 2033 ms | 640 KB | Time limit exceeded |
2 | Halted | 0 ms | 0 KB | - |