제출 #433842

#제출 시각아이디문제언어결과실행 시간메모리
433842Mounir다리 (APIO19_bridges)C++14
0 / 100
403 ms7212 KiB
#include <bits/stdc++.h> #define chmax(x, v) x = max(x, v) #define pii pair<int, int> #define pb push_back #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() #define int long long using namespace std; const int N = 1e6; struct Arete { int noeud, voisin, poids; bool operator < (const Arete &autre) const { if (poids != autre.poids) return poids < autre.poids; if (noeud != autre.noeud) return noeud < autre.noeud; return voisin < autre.voisin; } }; struct Req { int iReq, poids, noeud; bool operator < (const Req &autre) const { if (poids != autre.poids) return poids < autre.poids; return iReq < autre.iReq; } }; int ens[N], taille[N]; int getEns(int noeud){ if (ens[noeud] != noeud) ens[noeud] = getEns(ens[noeud]); return ens[noeud]; } int ans[N]; signed main(){ int nNoeuds, nAretes; cin >> nNoeuds >> nAretes; vector<Arete> aretes; for (int iArete = 0; iArete < nAretes; ++iArete){ int noeud, voisin, poids; cin >> noeud >> voisin >> poids; aretes.pb({noeud, voisin, poids}); } int nReqs; cin >> nReqs; vector<Req> reqs; for (int iReq = 0; iReq < nReqs; ++iReq){ int type, noeud, poids; cin >> type >> noeud >> poids; reqs.pb({iReq, poids, noeud}); } for (int noeud = 0; noeud <= nNoeuds; ++noeud) ens[noeud] = noeud, taille[noeud] = 1; sort(all(aretes)); sort(all(reqs)); int pt = 0, iArete = 0; while (pt < nReqs && reqs[pt].poids < aretes[0].poids){ ans[reqs[pt].iReq] = taille[getEns(reqs[pt].noeud)]; pt++; } for (Arete& arete : aretes){ if (true){ arete.noeud = getEns(arete.noeud); arete.voisin = getEns(arete.voisin); if (arete.noeud != arete.voisin){ ens[arete.noeud] = arete.voisin; taille[arete.voisin] += taille[arete.noeud]; } } int proc = 1e10; if (iArete + 1 != nAretes) proc = aretes[iArete+1].poids; while (pt < nReqs && reqs[pt].poids < proc){ ans[reqs[pt].iReq] = taille[getEns(reqs[pt].noeud)]; pt++; } ++iArete; } while (pt < nReqs) ans[reqs[pt++].iReq] = taille[getEns(reqs[pt].noeud)]; for (int iReq = 0; iReq < nReqs; ++iReq){ cout << ans[iReq] << endl; } return 0; }

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

bridges.cpp: In function 'int main()':
bridges.cpp:97:20: warning: operation on 'pt' may be undefined [-Wsequence-point]
   97 |         ans[reqs[pt++].iReq] = taille[getEns(reqs[pt].noeud)];
      |                  ~~^~
#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...