Untersuche die Frage sorgfältig, diese Frage wird verwendet und überprüft ... Frag mich nicht warum ...
Problembeschreibung
Land C besteht aus n Inseln. Um die Kommunikation zwischen den Inseln zu erleichtern, hat Land C m Brücken zwischen den Inseln gebaut, wobei jede Brücke zwei Inseln verbindet. Es kann mehrere Brücken zwischen den beiden Inseln geben. Aufgrund der Meerwassererosion besteht jedoch die Gefahr, dass einige Brücken unbrauchbar werden.
Wenn nicht alle Brücken zwischen den beiden Inseln verwendet werden können, können die beiden Inseln nicht direkt erreicht werden. Solange sich die Bewohner dieser beiden Inseln jedoch über andere Brücken oder andere Inseln erreichen können, geht es ihnen gut. Wenn es jedoch einen Weg gäbe, die beiden Inseln am Tag zuvor und am Tag nach ihrer Ankunft nicht zu erreichen, würden die Bewohner gemeinsam protestieren.
Jetzt weiß der König von Land C bereits, wie viele Tage jede Brücke nutzen kann, und darüber hinaus kann sie nicht mehr benutzt werden. Jetzt will er wissen, wie viele Tage die Bewohner protestieren werden.
Eingabeformat
Die erste Zeile der Eingabe enthält zwei ganze Zahlen n, m, die die Anzahl der Inseln und die Anzahl der Brücken darstellen.
In den nächsten m Zeilen geben drei ganze Zahlen a, b und t in jeder Zeile an, dass die Brücke zwei Inseln a und b verbindet und für t Tage verwendet werden kann. Die Anzahl der Inseln erhöht sich von 1.
Ausgabeformat
Es wird eine Ganzzahl ausgegeben, die angibt, wie viele Tage die Bewohner protestieren werden.
Beispieleingabe
4 4
1 2 2
1 3 2
2 3 1
3 4 3
Beispielausgabe
2
Beispielbeschreibung
Die Brücke zwischen 2 und 3 kann nach dem ersten Tag nicht mehr benutzt werden und ist nicht betroffen.
Die Brücke zwischen 1 und 2 und zwischen 1 und 3 kann nach dem nächsten Tag nicht mehr benutzt werden, und die Bewohner werden protestieren.
Die Brücke zwischen 3 und 4 kann nach dem dritten Tag nicht mehr benutzt werden, und die Bewohner werden protestieren.
Datengröße und Übereinstimmung
Für 30% der Daten gilt 1 <= n <= 20, 1 <= m <= 100;
für 50% der Daten 1 <= n <= 500, 1 <= m <= 10000;
für 100% der Daten 1 <= n <= 10000, 1 <= m <= 100000, 1 <= a, b <= n, 1 <= t <= 100000.
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int n, m; 5 int Vater [ 10000 + 5 ]; 6 Strukturbrücke { 7 int sta; 8 int endd; 9 int t; 10 } bri [ 100000 + 5 ]; 11 int cmp (Brücke a, Brücke b) { 12 Rückkehr bei> bt; 13 } 14 void set() { // Initialisierung des Elternknotens (der erste Elternknoten ist selbst) 15 für ( int i = 1 ; i <= n; i ++ ) { 16 Vater [i] = i; 17 } 18 return ; 19 } 20 / / Und überprüfe Menge 21 int find ( int a) { // Finde rekursiv den Wurzelknoten 22 if (Vater [a] == a) // Der Knoten, dessen Elternknoten selbst der Wurzelknoten 23 ist , gibt a zurück; 24 return find (Vater [ a]); 25 } 26 int unionbridge ( inta, int b) { // Bestimmen Sie, ob es sich um denselben Baum handelt, und bestimmen Sie, ob die beiden Punkte direkt (indirekt) 27 int fa = find (a); 28 int fb = find (b) erreichen können ); 29 if (fa! = Fb) { // Bäume zusammenführen, die nicht derselbe Wurzelknoten sind, dh die Situation, die nicht erreicht werden kann 30 dad [fa] = fb; 31 return 1 ; 32 } 33 return 0 ; // Can direct ( Indirekt) erreichen 34 } 35 36 37 int main () { 38 cin >> n >> m; 39 int num = m; 40 int a, b, t; 41 int i = 1 ; 42 while (num-- ) { 43 cin >> a >> b >> t; 44 bri [i] .sta = a; 45 bri [i] .endd = b; 46 bri [i] .t = t; 47 i ++ ; 48 } 49 int pre = - 1 ; 50 int ans = 0 ; 51 sort (bri + 1 , bri + m + 1 , cmp); 52 set (); 53 für ( int i = 1 ; i <= m; i ++ ) { 54 if (unionbridge (bri [i] .sta, bri [i] .endd) && pre! = Bri [i] .t) { // Das Urteil wird Kein Unfall, und notieren Sie die Anzahl der Tage mit Problemen 55 ans ++ ; 56 pre = bri [i] .t; 57 } 58 } 59 cout << ans << endl; 60 61 62 }