Submission #433635

#TimeUsernameProblemLanguageResultExecution timeMemory
433635MounirBridges (APIO19_bridges)C++14
13 / 100
3097 ms14712 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 = 1e5;
vector<pii> aretes[N];
int numNoeud[N], numVoisin[N];
int noeudArete[N], voisinArete[N];
bool vu[N];

int dfs(int noeud, int poids){
	vu[noeud] = true;
	int nb = 1;

	for (pii arete : aretes[noeud]){
		if (poids <= arete.second && !vu[arete.first])
			nb += dfs(arete.first, poids);
	}
	return nb;
}

signed main(){
	int nNoeuds, nAretes; cin >> nNoeuds >> nAretes;
	for (int iArete = 0; iArete < nAretes; ++iArete){
		int noeud, voisin, poids; cin >> noeud >> voisin >> poids;
		--noeud, --voisin;
		noeudArete[iArete] = noeud;
		voisinArete[iArete] = voisin;
		
		numNoeud[iArete] = sz(aretes[noeud]);
		numVoisin[iArete] = sz(aretes[voisin]);
		aretes[noeud].pb({voisin, poids});
		aretes[voisin].pb({noeud, poids});
	}

	int nReqs; cin >> nReqs;
	for (int iReq = 0; iReq < nReqs; ++iReq){
		int typeReq; cin >> typeReq;
		if (typeReq == 1){
			int iArete, poids; cin >> iArete >> poids; --iArete;
			aretes[noeudArete[iArete]][numNoeud[iArete]].second = poids;
			aretes[voisinArete[iArete]][numVoisin[iArete]].second = poids;
		}
		else {
			for (int noeud = 0; noeud < nNoeuds; ++noeud)
				vu[noeud] = false;
			int poids, depart; cin >> depart >> poids; --depart;
			cout << dfs(depart, poids) << endl;
		}
	}
	return 0;
}
#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...