rt,只过了环的数据,自己造了好几个小数据手模和代码跑出来一样的,不知道是写挂了还是题意理解错了www
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <vector>
#include <stack>
#include <map>
#define ri register
#define inf 0x7fffffff
#define E (1)
#define mk make_pair
#define int long long
using namespace std; const int N=600010, Mod=19260817;
inline int read()
{
int s=0, w=1; ri char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48), ch=getchar(); return s*w;
}
void print(int x) {if(x<0) x=-x, putchar('-'); if(x>9) print(x/10); putchar(x%10+'0'); }
int n,head[N],maxE,book[N],h[N],hw[N],cnt,size[N],ans,rd;
struct Edge{int nxt,to,rdis; }e[N];
inline void Add(int u,int v,int w) {e[++maxE].nxt=head[u]; head[u]=maxE; e[maxE].to=v, e[maxE].rdis=w; }
int DFS(int x,int fa)
{
if(book[x]) return x;
else book[x]=-1;
for(int i=head[x];i;i=e[i].nxt)
{
if(e[i].to==fa) continue;
int tt=DFS(e[i].to,x);
if(!tt) continue;
h[++cnt]=x, hw[cnt]=e[i].rdis, book[x]=1;
return tt^x?tt:0;
}
return 0;
}
void GetSize(int x,int fa)
{
size[x]=1;
for(int i=head[x];i;i=e[i].nxt)
{
if(e[i].to==fa||book[e[i].to]==1) continue;
GetSize(e[i].to,x);
size[x]+=size[e[i].to];
}
}
void GetZS(int x,int fa)
{
//printf("%lld\n",x);
for(int i=head[x];i;i=e[i].nxt)
{
//printf("%lld %lld %lld\n",x,e[i].to,book[e[i].to]);
if(e[i].to==fa||book[e[i].to]==1) continue;
ans=(ans+e[i].rdis*size[e[i].to]%Mod*(n-size[e[i].to])%Mod*2%Mod)%Mod;
GetZS(e[i].to,x);
}
}
inline int ksc(int x,int p) { int res=1; for(;p;p>>=1, x=x*x%Mod) if(p&1ll) res=res*x%Mod; return res; }
signed main()
{
n=read();
for(ri int i=1;i<=n;i++)
{
int u,v,w;
u=read(), v=read(), w=read();
Add(u,v,w), Add(v,u,w);
}
DFS(1,-1);
for(ri int i=1;i<=cnt;i++) GetSize(h[i],-1);
//for(ri int i=1;i<=n;i++) printf("%lld ",book[i]); puts("");
int wrs=0;
for(ri int i=1;i<=cnt;i++) rd=(rd+(size[h[i]]-1)*(size[h[i]]-1)%Mod)%Mod, wrs+=hw[i], wrs%=Mod;
rd=(n*n%Mod-rd+Mod)%Mod;
ans=rd*wrs%Mod; printf("%lld\n",ans);ans=ans*ksc(2,Mod-2)%Mod; //printf("%lld\n",ans);
for(ri int i=1;i<=cnt;i++) GetZS(h[i],-1); //printf("%lld\n",ans);
printf("%lld\n",ans);
printf("%lld\n",ans*ksc(n*n%Mod,Mod-2)%Mod);
return 0;
}
/*
9
1 2 3
3 2 4
2 4 5
4 5 1
5 6 6
6 4 2
5 7 2
5 8 7
8 9 1
*/