제출 #1193642

#제출 시각아이디문제언어결과실행 시간메모리
1193642Bui_Quoc_Cuong다리 (APIO19_bridges)C++20
13 / 100
3092 ms4936 KiB
//#pragma GCC optimize("O2") //#pragma GCC target("avx,avx2,fma") #include <bits/stdc++.h> using namespace std; #define ALL(A) A.begin(), A.end() #define FOR(i, a, b) for(int i = (a); i <= (int)(b); i++) #define FORD(i, a, b) for(int i = (a); i >= (int)b; i--) #define TIME (1.0 * clock() / CLOCKS_PER_SEC) #define fi first #define se second const int oo = (int) 2e9; const long long INF = (long long) 1e18; const int MAXN = (int) 4e5 + 5; int N, M, Q; struct Edges { int u, v, w; } E[MAXN]; struct Queries { int t; int id, val; int s, w; int id_qry; void input(void) { cin >> t; if (t == 1) cin >> id >> val; else cin >> s >> w; } } Qry[MAXN]; namespace sub1 { int lab[MAXN]; int find(int x) { return lab[x] < 0 ? x : lab[x] = find(lab[x]); } bool joint(int u, int v) { int x = find(u), y = find(v); if (x == y) return 0; if (lab[x] > lab[y]) swap(x, y); lab[x]+= lab[y]; lab[y] = x; return 1; } void solve() { for (int q = 1; q <= Q; q++) { int t = Qry[q].t; if (t == 1) { int id = Qry[q].id, val = Qry[q].val; E[id].w = val; continue; } int W = Qry[q].w, S = Qry[q].s; for (int i = 1; i <= N; i++) lab[i] = - 1; for (int i = 1; i <= M; i++) { if (E[i].w >= W) { joint(E[i].u, E[i].v); } } cout << - lab[find(S)] << "\n"; } } } namespace sub4 { bool checksub() { for (int i = 1; i <= Q; i++) if (Qry[i].t != 2) return 0; return 1; } int lab[MAXN]; int find(int x) { return lab[x] < 0 ? x : lab[x] = find(lab[x]); } bool joint(int u, int v) { int x = find(u), y = find(v); if (x == y) return 0; if (lab[x] > lab[y]) swap(x, y); lab[x]+= lab[y]; lab[y] = x; return 1; } int ans[MAXN]; void solve() { sort(Qry + 1, Qry + 1 + Q, [&](Queries u, Queries v) { return u.w < v.w; }); sort(E + 1, E + 1 + M, [&](Edges u, Edges v) { return u.w < v.w; }); for (int i = 1; i <= N; i++) lab[i] = - 1; int j = M; for (int i = Q; i >= 1; i--) { while (j >= 1 && E[j].w >= Qry[i].w) { joint(E[j].u, E[j].v); j--; } ans[Qry[i].id_qry] = - lab[find(Qry[i].s)]; } for (int i = 1; i <= Q; i++) cout << ans[i] << "\n"; } } void process() { cin >> N >> M; for (int i = 1; i <= M; i++) { cin >> E[i].u >> E[i].v >> E[i].w; } cin >> Q; for (int i = 1; i <= Q; i++) { Qry[i].input(); Qry[i].id_qry = i; } if (Q <= 10000 && N <= 1000) return sub1 :: solve(); if (sub4 :: checksub()) return sub4 :: solve(); } signed main(void) { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #define Hori "" if (fopen(Hori".inp", "r")) { freopen(Hori".inp", "r", stdin); freopen(Hori".out", "w", stdout); } process(); return void(cerr << "KO :" << TIME << "s "), (0 ^ 0); }

컴파일 시 표준 에러 (stderr) 메시지

bridges.cpp: In function 'int main()':
bridges.cpp:140:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  140 |         freopen(Hori".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:141:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  141 |         freopen(Hori".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...