Submission #1141785

#TimeUsernameProblemLanguageResultExecution timeMemory
1141785nuutsnoynton철도 요금 (JOI16_ho_t3)C++17
100 / 100
67 ms12988 KiB
#include <iostream> #include<string> #include<algorithm> #include<functional> #include<cmath> #include<queue> #include<vector> #include<map> #include<stack> #include<list> #include<deque> #include<set> #include<unordered_set> #include<unordered_map> #include<numeric> #include<bitset> #include<iomanip> #include<cstdlib> #include<time.h> #include <functional> #include <chrono> #include <thread> #include <fstream> #include <random> using namespace std; #ifdef _DEBUG #define prnt(a) cout<<#a<<"="<<a<<endl #else #define prnt(a) (void)0 #endif // _DEBUG #ifdef _MSC_VER # include <intrin.h> # define __builtin_popcount __popcnt #endif #define ull unsigned long long #define ll int #define ld long double #define INF (1LL<<30) #define INFLL (1LL<<60) #define MOD 1000000007 #define MOD2 998244353 #define rep(i,st,en) for(ll i=(st);i<(en);++i) #define vld vector<ld> #define vll vector<ll> #define vvll vector<vll> #define vi vector<int> #define vvi vector<vi> #define vb vector<bool> #define vvb vector<vb> #define pii pair<int,int> #define pll pair<ll,ll> #define vpii vector<pii> #define vpll vector<pll> #define VS vector<string> #define MY_PI 3.141592653589793238462643383279502884L #define all(v) (v).begin(), (v).end() #define rd(...) __VA_ARGS__; read(__VA_ARGS__) #define rdv(value,...) value(__VA_ARGS__);cin >> value template <class T> auto& operator>>(istream& is, vector<T>& xs) { for (auto& x : xs) is >> x; return is; } template <class T> auto& operator<<(ostream& os, vector<T>& xs) { int sz = xs.size(); rep(i, 0, sz) os << xs[i] << " \n"[i + 1 == sz]; return os; } template <class T, class Y> auto& operator<<(ostream& os, pair<T, Y>& xs) { os << "{" << xs.first << ", " << xs.second << "}"; return os; } template <class T, class Y> auto& operator>>(istream& is, vector<pair<T, Y>>& xs) { for (auto& [x1, x2] : xs) is >> x1 >> x2; return is; } template <class ...Args> auto& read(Args & ...args) { return (cin >> ... >> args); } #define write(...) writemy(__VA_ARGS__);cout<<"\n" void writemy() {} template <typename Head, class ...Args> void writemy(const Head& head, const Args & ...args) { cout << head << " "; writemy(args...); } const ll M = 2e5 + 2; const ll N = 1e5 + 2; ll x[M], y[M], a[M]; int d[N], D[N]; vector < ll > adj[N]; ll used[M] = { 0 }; int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n, m, r, i, j, x1, y1, s, ans, t; cin >> n >> m >> t; for (i = 1; i <= n; i++) { D[i] = 1e9; d[i] = 1e9; } D[1] = 0; for (i = 1; i <= m; i++) { cin >> x[i] >> y[i]; adj[x[i]].push_back(y[i]); adj[y[i]].push_back(x[i]); } queue < ll > q; q.push(1); r = 0; while (!q.empty()) { x1 = q.front(); r++; q.pop(); for (ll X : adj[x1]) { if (D[X] <= D[x1] + 1) continue; D[X] = D[x1] + 1; q.push(X); } } for (i = 1; i <= n; i++) { d[i] = D[i]; D[i] = 1e9; adj[i].clear(); } D[1] = 0; for (i = 1; i <= t; i++) { cin >> a[i]; used[a[i]] = 1; } for (i = 1; i <= m; i++) { if (used[i] == 0) { if (d[x[i]] == d[y[i]] + 1) { adj[y[i]].push_back(x[i]); } if (d[y[i]] == d[x[i]] + 1) { adj[x[i]].push_back(y[i]); } } } q.push(1); while (!q.empty()) { x1 = q.front(); q.pop(); for (ll X : adj[x1]) { if (D[X] <= D[x1] + 1) continue; D[X] = D[x1] + 1; q.push(X); } } s = 0; for (i = 1; i <= n; i++) { if (d[i] != 1e9 && d[i] == D[i]) s++; } vector < ll > Ans; for (i = t; i >= 1; i--) { Ans.push_back(r - s); x1 = x[a[i]]; y1 = y[a[i]]; if (d[x1] < d[y1]) swap(x1, y1); //d[x1]>d[y1] if (abs(d[x1] - d[y1]) == 1) { adj[y1].push_back(x1); } if (d[x1]!=D[x1] && d[y1]==D[y1] && d[x1] == d[y1] + 1) { D[x1] = d[x1]; s++; q.push(x1); } while (!q.empty()) { x1 = q.front(); q.pop(); for (ll X : adj[x1]) { if (D[X] == d[X]) continue; D[X] = min(D[x1] + 1, D[X]); if (D[X] == d[X]) { s++; q.push(X); } } } } reverse(Ans.begin(), Ans.end()); for (i = 0; i < Ans.size(); i++) { cout << Ans[i] << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...