Submission #1041610

#TimeUsernameProblemLanguageResultExecution timeMemory
1041610Muhammad_AneeqIzlet (COI19_izlet)C++17
18 / 100
1330 ms36484 KiB
/* بسم الله الرحمن الرحيم Author: (:Muhammad Aneeq:) */ #include <iostream> #include <vector> #include <set> #include <map> using namespace std; int const N=3e3+10; int par[N]={}; vector<int>nei[N]={}; vector<int>mem[N]={}; int a[N][N]={}; int an[N]={}; int root(int n) { if (par[n]==n) return n; return (par[n]=root(par[n])); } set<int>s; map<int,int>cnt; void dfs(int u,int root=-1,int v=-1) { if (root==-1) root=u; if (a[root][u]==s.size()) { an[u]=an[root]; } s.insert(an[u]); cnt[an[u]]++; for (auto i:nei[u]) { if (i!=v) dfs(i,root,u); } cnt[an[u]]--; if (cnt[an[u]]==0) s.erase(an[u]); } inline void solve() { int subt; cin>>subt; int n; cin>>n; for (int i=0;i<n;i++) par[i]=i,mem[i].push_back(i); for (int i=0;i<n;i++) for (int j=0;j<n;j++) cin>>a[i][j]; vector<vector<int>>ans; for (int i=0;i<n;i++) { for (int j=i+1;j<n;j++) { if (a[i][j]==1) { int a=i,b=j; a=root(a),b=root(b); if (a==b) continue; par[b]=a; ans.push_back({a,b}); for (auto i:mem[b]) mem[a].push_back(i); mem[b]={}; } } } vector<int>z; for (int i=1;i<n;i++) if (root(i)==i) z.push_back(i); vector<int>f; f.push_back(0); vector<pair<int,int>>g; while (z.size()) { vector<int>g,x; for (auto i:z) { bool w=0; for (auto j:f) { if (a[i][j]==2) { w=1; ans.push_back({i,j}); nei[i].push_back(j); nei[j].push_back(i); break; } } if (w==0) g.push_back(i); else x.push_back(i); } z=g; for (auto i:x) f.push_back(i); } for (auto i:f) an[i]=i+1; for (auto i:f) { s={},cnt.clear(); dfs(i); } for (auto i:f) { for (auto j:mem[i]) an[j]=an[i]; } for (int i=0;i<n;i++) cout<<an[i]<<' '; cout<<endl; for (auto i:ans) cout<<i[0]+1<<' '<<i[1]+1<<endl; } int main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); solve(); }

Compilation message (stderr)

izlet.cpp: In function 'void dfs(int, int, int)':
izlet.cpp:29:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::set<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |  if (a[root][u]==s.size())
      |      ~~~~~~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...