#include<bits/stdc++.h>
#define fr first
#define sc second
#define pb push_back
using namespace std;const int N=5e5+7;typedef pair<int,int>pa;
int n,f[N],col,i,x,y,z,rt;vector<pa>g[N];vector<int>q;
void dfs1(int x,int fa=0){for(auto y:g[x])if(y.fr!=fa)f[1]+=(y.sc!=-1),dfs1(y.fr, x);}
void dfs2(int x,int fa=0){if(f[x]>f[rt])rt=x;for(auto y:g[x])if(y.fr!=fa)f[y.fr]=f[x]-y.sc,dfs2(y.fr,x);}
void dfs3(int x,int fa=0){
for(auto y:g[x])if(y.fr!=fa){
int c;if(y.sc==-1)printf("%d %d %d\n", y.fr, x, c=q.back()),q.pop_back();
else printf("%d %d %d\n",x,y.fr,++col),q.pb(col);
dfs3(y.fr,x);if(y.sc==-1)q.push_back(c);else q.pop_back();
}
}
int main(){
for(scanf("%d",&n),i=1;i<n;++i)scanf("%d%d%d",&x,&y,&z),g[x].pb(pa(y,z)),g[y].pb(pa(x,-z));
dfs1(1);dfs2(1);printf("%d\n",f[rt]);dfs3(rt);
}
1602A - Two Subsequences | 1555A - PizzaForces |
1607B - Odd Grasshopper | 1084A - The Fair Nut and Elevator |
1440B - Sum of Medians | 1032A - Kitchen Utensils |
1501B - Napoleon Cake | 1584B - Coloring Rectangles |
1562B - Scenes From a Memory | 1521A - Nastia and Nearly Good Numbers |
208. Implement Trie | 1605B - Reverse Sort |
1607C - Minimum Extraction | 1604B - XOR Specia-LIS-t |
1606B - Update Files | 1598B - Groups |
1602B - Divine Array | 1594B - Special Numbers |
1614A - Divan and a Store | 2085. Count Common Words With One Occurrence |
2089. Find Target Indices After Sorting Array | 2090. K Radius Subarray Averages |
2091. Removing Minimum and Maximum From Array | 6. Zigzag Conversion |
1612B - Special Permutation | 1481. Least Number of Unique Integers after K Removals |
1035. Uncrossed Lines | 328. Odd Even Linked List |
1219. Path with Maximum Gold | 1268. Search Suggestions System |