結果
問題 | No.1865 Make Cycle |
ユーザー |
![]() |
提出日時 | 2022-03-04 22:40:24 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 551 ms / 3,000 ms |
コード長 | 2,795 bytes |
コンパイル時間 | 4,325 ms |
コンパイル使用メモリ | 257,744 KB |
最終ジャッジ日時 | 2025-01-28 05:51:01 |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 20 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;#define rep(i, n) for(ll i = 0; i < n; i++)#define rep2(i, m, n) for(ll i = m; i <= n; i++)#define rrep(i, m, n) for(ll i = m; i >= n; i--)#define all(a) a.begin(), a.end()#define rall(a) a.rbegin(), a.rend()#define MAX(x) *max_element(all(x))#define MIN(x) *min_element(all(x))#define SZ(a) ((ll)(a).size())#define bit(n, k) ((n >> k) & 1)using namespace std;using ll = long long;using P = pair<ll, ll>;const int dx[4] = { -1, 1, 0, 0 };const int dy[4] = { 0, 0, 1, -1 };const int inf = 1e9 + 1;const ll INF = 1e18;const double pi = acos(-1);using Graph = vector<vector<ll>>;using REV_PQ = priority_queue<ll, vector<ll>, greater<ll>>;using PQ = priority_queue<ll>;//typedef atcoder::modint998244353 mint;typedef atcoder::modint1000000007 mint;const int SIZE = 200010;ll powll(ll n, ll x) {// return n ^ x;ll ret = 1;rep(i, x) ret *= n;return ret;}/*struct Edge { ll u, v, cost; };bool comp(const Edge& e1, const Edge& e2) {return e1.cost < e2.cost;}*/void OutputYesNo(bool val) {if (val) cout << "Yes" << endl;else cout << "No" << endl;}void OutputTakahashiAoki(bool val) {if (val) cout << "Takahashi" << endl;else cout << "Aoki" << endl;}void OutPutInteger(ll x) { cout << x << endl; }void OutPutString(string x) { cout << x << endl; }int n;int a[SIZE];int b[SIZE];bool Toposo(const Graph& G, const Graph& G_rev) {vector<int> ret;vector<int> index(n), index_rev(n);queue<int> q;rep(i, n) {for (auto v : G[i]) {index[v]++;}}rep(i, n) {for (auto v : G_rev[i]) {index_rev[v]++;}}rep(i, n) if (index_rev[i] > 0 and index[i] == 0) q.push(i);int sz = 0;rep(i, n) if (index_rev[i] + index[i] > 0) sz++;while (!q.empty()) {int cur = q.front();ret.push_back(cur);q.pop();for (auto v : G[cur]) {index[v]--;if (index[v] == 0) {q.push(v);}}}if (SZ(ret) != sz) return true;return false;}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int q; cin >> n >> q;rep(i, q) {cin >> a[i] >> b[i];a[i]--, b[i]--;}int mi = 1, ma = q;bool ok = false;while (ma - mi > 1) {int mid = (mi + ma) / 2;Graph G(n), G_rev(n);rep(i, mid) {G[a[i]].push_back(b[i]);G_rev[b[i]].push_back(a[i]);}if (Toposo(G, G_rev)) {ma = mid;ok = true;}else mi = mid;}if (ok) OutPutInteger(mi +1);else OutPutInteger(-1);}