結果
| 問題 |
No.3103 Butterfly Effect
|
| コンテスト | |
| ユーザー |
shobonvip
|
| 提出日時 | 2025-02-12 02:21:08 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 968 bytes |
| コンパイル時間 | 1,967 ms |
| コンパイル使用メモリ | 206,976 KB |
| 実行使用メモリ | 61,100 KB |
| 最終ジャッジ日時 | 2025-02-12 02:21:27 |
| 合計ジャッジ時間 | 14,847 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 26 WA * 14 |
ソースコード
// fast
// O(N + Q log Q)
#include<bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, q; cin >> n >> q;
vector<int> dp(n, q+1);
dp[0] = -1;
vector<set<pair<int,int>>> horyu(n);
int ans = 1;
for (int num=0; num<q; num++) {
int p; cin >> p;
p--;
int x, y; cin >> x >> y;
x--; y--;
if (dp[x] < p && dp[y] < p) {
}else if (dp[x] > p && dp[y] > p) {
horyu[x].insert(pair(p,y));
horyu[y].insert(pair(p,x));
}else{
if (dp[y] < p) {
swap(x, y);
}
assert(dp[x] < p && dp[y] > p);
if (dp[y] == q+1) ans++;
dp[y] = p;
priority_queue<pair<int,int>> mada;
mada.push(pair(p,y));
while (!mada.empty()) {
auto [t,i] = mada.top();
mada.pop();
if (dp[i] > t) continue;
for (auto [tim,z]:horyu[i]){
if (dp[z] > tim) {
if (dp[z] == q+1) ans++;
dp[z] = tim;
mada.push(pair(tim,z));
}
}
}
}
cout << ans << '\n';
}
}
shobonvip