Submission #375196

#TimeUsernameProblemLanguageResultExecution timeMemory
3751968e7Meetings (JOI19_meetings)C++14
0 / 100
72 ms748 KiB
//Challenge: Accepted #include <iostream> #include <algorithm> #include <utility> #include <vector> #include "meetings.h" #define ll long long #define maxn 3005 #define pii pair<int, int> #define ff first #define ss second #define io ios_base::sync_with_stdio(0);cin.tie(0); using namespace std; int tot; vector<pii> ans; vector<int> adj[maxn], sub[maxn]; bool found[maxn]; void dfs(int n, vector<int> &add) { found[n] = 1; add.push_back(n); for (int v:adj[n]) { if (!found[v]) { dfs(v, add); } } } int getcon(int root, vector<int> v) { if (v.size() == 1) return v[0]; int ret = Query(root, v[0], v[1]); for (int i = 2;i < v.size();i++) { if (ret != v[i]) ret = Query(root, ret, v[i]); } return ret; } int curroot; inline bool cmp(int x, int y) { return Query(curroot, x, y) == x; } void solve(int root, vector<int> v) { if (v.size() == 0) return; if (v.size() == 1) { ans.push_back(make_pair(root, v[0])); return; } //for (int i = 0;i < v.size();i++) adj[v[i]].clear(), found[v[i]] = 0; for (int i = 0;i < tot;i++) found[i] = 0, sub[i].clear(); vector<int> path; path.push_back(v[0]); found[root] = found[v[0]] = 1; int x = v[0]; for (int i = 1;i < v.size();i++) { int val = Query(root, x, v[i]); if (val == x) { path.push_back(v[i]); found[v[i]] = 1; x = v[i]; } else { if (!found[val]) { path.push_back(val); found[val] = 1; } if (val != v[i]) { //cout << val << " " << v[i] << endl; sub[val].push_back(v[i]); } } } //finds a path from root to leaf and splits other nodes (vs - 1 queries) curroot = root; sort(path.begin(), path.end(), cmp); for (int i = 0;i < path.size();i++) { //cout << path[i] << " "; ans.push_back(i ? make_pair(path[i], path[i - 1]) : make_pair(path[i], root)); } //cout << endl; path.push_back(root); for (int i = 0;i < path.size();i++) { solve(path[i], sub[path[i]]); } /* for (int i = 0;i < v.size();i++) { for (int j = i + 1;j < v.size();j++) { if(Query(root, v[i], v[j]) != root) { adj[v[i]].push_back(v[j]); adj[v[j]].push_back(v[i]); } } } for (int i = 0;i < v.size();i++) { if (!found[v[i]]) { vector<int> sub; dfs(v[i], sub); int to = getcon(root, sub); ans.push_back(make_pair(root, to)); vector<int> nxt; for (int j:sub) { if (j != to) nxt.push_back(j); } solve(to, nxt); } } */ } void Solve(int N) { tot = N; vector<int> v; for (int i = 1;i < tot;i++) v.push_back(i); solve(0, v); for (auto i:ans) { if (i.ff > i.ss) swap(i.ff, i.ss); //cout << i.ff << " " << i.ss << endl; Bridge(i.ff, i.ss); } } /* 5 0 1 0 2 1 3 1 4 */

Compilation message (stderr)

meetings.cpp: In function 'int getcon(int, std::vector<int>)':
meetings.cpp:33:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |  for (int i = 2;i < v.size();i++) {
      |                 ~~^~~~~~~~~~
meetings.cpp: In function 'void solve(int, std::vector<int>)':
meetings.cpp:57:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |  for (int i = 1;i < v.size();i++) {
      |                 ~~^~~~~~~~~~
meetings.cpp:77:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |  for (int i = 0;i < path.size();i++) {
      |                 ~~^~~~~~~~~~~~~
meetings.cpp:83:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |  for (int i = 0;i < path.size();i++) {
      |                 ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...