結果
問題 | No.416 旅行会社 |
ユーザー |
|
提出日時 | 2016-08-26 23:41:58 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 433 ms / 4,000 ms |
コード長 | 2,659 bytes |
コンパイル時間 | 2,189 ms |
コンパイル使用メモリ | 107,432 KB |
実行使用メモリ | 15,744 KB |
最終ジャッジ日時 | 2024-12-14 19:54:34 |
合計ジャッジ時間 | 7,630 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 21 |
ソースコード
#include <vector>#include <list>#include <map>#include <set>#include <deque>#include <stack>#include <queue>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <cctype>#include <string>#include <cstring>#include <ctime>using namespace std;inline int toInt(string s) {int v; istringstream sin(s);sin>>v;return v;}template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}typedef vector<int> VI;typedef vector<VI> VVI;typedef vector<string> VS;typedef pair<int, int> PII;typedef long long LL;#define FOR(i,a,b) for(int i=(a);i<(b);++i)#define REP(i,n) FOR(i,0,n)#define MP make_pair#define MT make_tuple#define EACH(i,c) for(auto i: c)#define SORT(c) sort((c).begin(),(c).end())#define ALL(a) (a).begin(),(a).end()#define RALL(a) (a).rbegin(), (a).rend()const double EPS = 1e-10;const double PI = acos(-1.0);#define dump(x) cerr << #x << " = " << (x) << endl;#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;VI par, ran;void init(int n){par = VI(n);ran = VI(n, 0);REP(i, n){par[i] = i;}}int find(int x){if(par[x] == x){return x;}return par[x] = find(par[x]);}void unite(int x, int y){x = find(x);y = find(y);if(x == y) return;if(ran[x] < ran[y]){par[x] = y;}else{par[y] = x;if(ran[x] == ran[y]) ran[x]++;}}bool same(int x, int y){return find(x) == find(y);}int main() {cin.tie(0);ios::sync_with_stdio(false);int N, M, Q;cin >> N >> M >> Q;set<PII> s;vector<PII> AB(M);REP(i, M){int A, B;cin >> A >> B;AB[i] = MP(A, B);s.insert(MP(A, B));}vector<PII> CD(Q);REP(i, Q){int C, D;cin >> C >> D;CD[i] = MP(C, D);s.erase(MP(C,D));}VI ans(N + 1, 0);VVI R(N + 1);init(N + 1);EACH(p, s){unite(p.first, p.second);R[p.first].push_back(p.second);R[p.second].push_back(p.first);}FOR(i, 1, N + 1){if(same(1, i)){ans[i] = -1;}}for(int i = Q - 1; i >= 0; i--){int x, y;x = CD[i].first;y = CD[i].second;unite(x, y);R[x].push_back(y);R[y].push_back(x);if((ans[x] == 0 && same(1, x)) || (ans[y] == 0 && same(1, y))){queue<int> que;que.push(x);que.push(y);while(!que.empty()){int cur = que.front();que.pop();if(ans[cur] == 0){ans[cur] = i + 1;EACH(r, R[cur]) if(ans[r] == 0) que.push(r);}}}}FOR(i, 2, N + 1){cout << ans[i] << endl;}return 0;}