結果
| 問題 |
No.416 旅行会社
|
| ユーザー |
nmnmnmnmnmnmnm
|
| 提出日時 | 2016-08-27 00:05:19 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 657 ms / 4,000 ms |
| コード長 | 1,996 bytes |
| コンパイル時間 | 2,697 ms |
| コンパイル使用メモリ | 109,728 KB |
| 実行使用メモリ | 40,744 KB |
| 最終ジャッジ日時 | 2024-12-14 19:55:10 |
| 合計ジャッジ時間 | 8,801 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 21 |
ソースコード
#include <algorithm>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#include <list>
using namespace std;
typedef long long ll;
#define sz size()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(c) (c).begin(), (c).end()
#define rep(i,a,b) for(ll i=(a);i<(b);++i)
#define clr(a, b) memset((a), (b) ,sizeof(a))
#define ctos(d) string(1,d)
#define print(x) cout<<#x<<" = "<<x<<endl;
#define MOD 1000000007
ll d[200005];
vector<vector<ll> > v;
void dfs(ll p, ll c) {
d[p] = c;
rep(i, 0, v[p].sz) {
if (d[v[p][i]] != -1)continue;
dfs(v[p][i], c);
}
}
int main() {
ll n, m, q;
cin >> n >> m >> q;
map<pair<ll, ll> , ll> ma;
vector<pair<ll, ll> > vm;
vector<pair<ll, ll> > vm1;
vector<pair<ll, ll> > vq;
vector<vector<ll> > v_(200005, vector<ll>());
v = v_;
rep(i, 0, m) {
ll a, b;
cin >> a >> b;
a--; b--;
vm.pb(mp(a, b));
}
rep(i, 0, q) {
ll a, b;
cin >> a >> b;
a--; b--;
vq.pb(mp(a, b));
ma[mp(a, b)] = 1;
}
reverse(all(vq));
rep(i, 0, m) {
ll a = vm[i].fi;
ll b = vm[i].se;
if (ma[mp(a, b)] == 0) {
vm1.pb(mp(a, b));
}
}
rep(i, 0, vm1.sz) {
v[vm1[i].fi].pb(vm1[i].se);
v[vm1[i].se].pb(vm1[i].fi);
}
clr(d, -1);
dfs(0, 0);
rep(i, 0, q) {
ll a = vq[i].fi;
ll b = vq[i].se;
v[a].pb(b);
v[b].pb(a);
if (d[a] != -1 && d[b] == -1) {
dfs(b, i + 1);
}
if (d[a] == -1 && d[b] != -1) {
dfs(a, i + 1);
}
}
rep(i, 1, n) {
if (q - d[i] + 1 == q + 1) {
cout << -1 << endl;
}
else if (d[i] == -1) {
cout << 0 << endl;
}
else {
cout << q - d[i] + 1 << endl;
}
}
return 0;
}
nmnmnmnmnmnmnm