Submission #107259

#TimeUsernameProblemLanguageResultExecution timeMemory
107259batmend_khFriend (IOI14_friend)C++14
Compilation error
0 ms0 KiB
#include<bits/stdc++.h> using namespace std; struct edge{ int bg; int en; int flow; edge (int bg, int en, int flow) { this -> bg = bg; this -> en = en; this -> flow = flow; } }; int height, width, n_banks; vector<edge> edges; vector<vector<pair<int, int> > > adj; pair<int, int> parent[6005]; int get_in(int h, int w) { return h * width + w; } int get_out(int h, int w) { return get_in(h, w) + 3000; } void make_edge(int bg, int en) { edges.push_back(edge(bg, en, 1)); adj[bg].push_back(make_pair(en, edges.size() - 1)); adj[en].push_back(make_pair(bg, edges.size() - 1)); } bool found_path() { queue <int> q; for (int i = 0; i <= 6001; i++) parent[i] = make_pair(-1, -1); q.push(6000); parent[6000] = make_pair(0, 0); while (!q.empty()) { int current = q.front(); q.pop(); for (int i = 0; i < adj[current].size(); i++) { if (parent[adj[current][i].first] != make_pair(-1, -1)) continue; edge x = edges[adj[current][i].second]; int bg = x.bg; int en = x.en; if (current == bg && x.flow == 1) { parent[en] = make_pair(bg, i); q.push(en); } if (current == en && x.flow == 0) { parent[bg] = make_pair(en, i); q.push(bg); } } } if (parent[6001] == make_pair(-1, -1)) return 0; else return 1; } int main() { int q_; cin >> q_; while (q_--) { cin >> width >> height >> n_banks; int answer = 0; edges.clear(); adj = vector<vector<pair<int, int> > > (6005); for (int i = 1; i <= height; i++) { for (int j = 1; j <= width; j++) { make_edge(get_in(i, j), get_out(i, j)); if (i - 1 > 0) make_edge (get_out(i, j), get_in(i - 1, j)); if (j - 1 > 0) make_edge (get_out(i, j), get_in(i, j - 1)); if (i + 1 <= height) make_edge (get_out(i, j), get_in(i + 1, j)); if (j + 1 <= width) make_edge (get_out(i, j), get_in(i, j + 1)); if (i - 1 == 0 || j - 1 == 0 || i + 1 > height || j + 1 > width) make_edge (get_out(i, j), 6001); } } for (int i = 0, x, y; i < n_banks; i++) { cin >> x >> y; make_edge(6000, get_in(y, x)); } while (found_path()) { answer++; for (int i = 6001; i != 6000; i = parent[i].first) { edges[adj[parent[i].first][parent[i].second].second].flow ^= 1; } } if (answer == n_banks) cout << "possible" << '\n'; else cout << "not possible" << '\n'; } }

Compilation message (stderr)

friend.cpp: In function 'bool found_path()':
friend.cpp:41:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 0; i < adj[current].size(); i++) {
                         ~~^~~~~~~~~~~~~~~~~~~~~
/tmp/ccTP0w6T.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/ccpl0glA.o:friend.cpp:(.text.startup+0x0): first defined here
/tmp/ccTP0w6T.o: In function `main':
grader.cpp:(.text.startup+0xba): undefined reference to `findSample(int, int*, int*, int*)'
collect2: error: ld returned 1 exit status