Submission #240938

#TimeUsernameProblemLanguageResultExecution timeMemory
240938brcodeIzlet (COI19_izlet)C++14
18 / 100
2088 ms65912 KiB
#include <iostream> #include <bits/stdc++.h> using namespace std; const int MAXN =5e3+5; int dist[MAXN][MAXN]; vector<int> v1[MAXN]; int cnt[MAXN]; int col[MAXN]; vector<pair<int,int>> edges; bool visited[MAXN]; int p[MAXN]; int n; int nxt; int sz[MAXN]; void colour(int a,int b,int c){ if(cnt[col[b]] == 0 && dist[a][b] == dist[a][c]){ col[a] = col[b]; } if(c!=-1){ cnt[col[b]]++; } for(int x:v1[b]){ if((!visited[x])||x==c){ continue; } colour(a,x,b); } if(c!=-1){ cnt[col[b]]--; } } void dfs(int curr,int par){ visited[curr] = true; colour(curr,curr,-1); if(col[curr] == 0){ col[curr] = nxt+1; nxt++; } for(int x:v1[curr]){ if(!visited[x]){ dfs(x,curr); } } } int findpar(int a){ if(p[a] == a){ return a; } return p[a] = findpar(p[a]); } void merge(int a,int b){ if(findpar(a)==findpar(b)){ return; } v1[a].push_back(b); v1[b].push_back(a); edges.push_back(make_pair(a,b)); a = findpar(a); b= findpar(b); if(sz[b]>sz[a]){ swap(a,b); } p[b] = a; sz[a]+=sz[b]; } int main() { int tc; cin>>tc; cin>>n; for(int i=1;i<=n;i++){ p[i] = i; sz[i] = 1; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>dist[i][j]; if(dist[i][j] == 1){ merge(i,j); } } } vector<int> nodes; for(int i=1;i<=n;i++){ if(p[i] == i){ nodes.push_back(i); } } for(int i=0;i<nodes.size();i++){ for(int j=i+1;j<nodes.size();j++){ if(dist[nodes[i]][nodes[j]] == 2){ merge(nodes[i],nodes[j]); } } } dfs(1,0); for(int i=1;i<=n;i++){ cout<<col[i]<<" "; } cout<<endl; for(auto x:edges){ cout<<x.first<<" "<<x.second<<endl; } }

Compilation message (stderr)

izlet.cpp: In function 'int main()':
izlet.cpp:92:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<nodes.size();i++){
                 ~^~~~~~~~~~~~~
izlet.cpp:93:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=i+1;j<nodes.size();j++){
                       ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...