Submission #298362

#TimeUsernameProblemLanguageResultExecution timeMemory
298362RayaabualjamalSplit the Attractions (IOI19_split)C++14
18 / 100
2081 ms11000 KiB
#include "split.h" #include <cassert> #include <iostream> #include <set> #include <queue> #include <iterator> #include <cmath> #include <algorithm> #include <vector> #include <map> #include <cstdio> #define rep(i,a,b) for(int i = a; i<b; i++) #define per(i,a,b) for(int i = a; i>=b; i--) #define pb push_back #define se second using namespace std; vector <int> ans; vector < vector <int> > ve; vector < pair <int, int> > ce; int dfs(int v){ if(ans[v] == 4|| ans[v]==ce[1].se)return 0; int cnt = 1; ans[v]=4; for(int l:ve[v]){ if(ans[l]!=4&&ans[l]!=ce[1].se){ cnt+=dfs(l); } } return cnt; } void bfs2(int v){ int h = ce[0].first; int d = ce[0].se; set<int> s; s.insert(v); ans[v] = d; h--; while(!s.empty()&&h){ int best = *s.begin(); s.erase(s.begin()); for(int k:ve[best]){ if(h&&ans[k]==4){ ans[k]=d; h--; s.insert(k); } } } } void fix(){ rep(i,0,ans.size()){ if(ans[i]==4){ ans[i]=ce[2].se; } } } bool bfs(int v){ int h = ce[1].first; int d = ce[1].se; queue <int> s; s.push(v); ans[v] = d; h--; while(!s.empty()&&h){ int best = s.front(); s.pop(); for(int k:ve[best]){ if(h&&ans[k]!=d){ ans[k]=d; h--; s.push(k); } } } //cout << endl; rep(i,0,ans.size()){ if(ans[i]!=d){ int count = dfs(i); //cout << v << " " << count << " " << i << endl; if(count >=ce[0].first){ bfs2(i); fix(); //cout << "here" << endl; return true; } } } return false; } vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { ce.pb(make_pair(a, 1)); ce.pb(make_pair(b, 2)); ce.pb(make_pair(c, 3)); sort(ce.begin(), ce.end()); ve.resize(n+1); rep(i,0,p.size()){ ve[p[i]].pb(q[i]); ve[q[i]].pb(p[i]); } bool f = 0; rep(i,0,n){ //cout << i << endl; ans.assign(n,ce[2].se); if(bfs(i)){ f = 1; break; } } if(f)return ans; ans.assign(n,0); return ans; }

Compilation message (stderr)

split.cpp: In function 'void fix()':
split.cpp:13:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 | #define rep(i,a,b) for(int i = a; i<b; i++)
......
   52 |  rep(i,0,ans.size()){
      |      ~~~~~~~~~~~~~~                 
split.cpp:52:2: note: in expansion of macro 'rep'
   52 |  rep(i,0,ans.size()){
      |  ^~~
split.cpp: In function 'bool bfs(int)':
split.cpp:13:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 | #define rep(i,a,b) for(int i = a; i<b; i++)
......
   77 |  rep(i,0,ans.size()){
      |      ~~~~~~~~~~~~~~                 
split.cpp:77:2: note: in expansion of macro 'rep'
   77 |  rep(i,0,ans.size()){
      |  ^~~
split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:13:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 | #define rep(i,a,b) for(int i = a; i<b; i++)
......
   97 |  rep(i,0,p.size()){
      |      ~~~~~~~~~~~~                   
split.cpp:97:2: note: in expansion of macro 'rep'
   97 |  rep(i,0,p.size()){
      |  ^~~
#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...