1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 using namespace std;
5 const int N=2510,inf=100000000;
6 struct ee{int to,next,f,w;}e[3000005];
7 int S,T,cnt=1,n,k,ans,f,v,w,m,u,K,S1;
8 int head[N],dis[N],pre[N],q[N],d[N][N];
9 bool inq[N];
10 void ins(int u,int v,int f,int w){
11 e[++cnt].to=v,e[cnt].next=head[u],e[cnt].f=f,e[cnt].w=w,head[u]=cnt;
12 e[++cnt].to=u,e[cnt].next=head[v],e[cnt].f=0,e[cnt].w=-w,head[v]=cnt;
13 }
14
15 bool spfa(){
16 for (int i=0;i<=T+1;i++) dis[i]=inf;
17 int h=0,t=1;
18 q[t]=S;dis[S]=0;inq[S]=1;
19 while (h!=t){
20 int now=q[++h];if(h==T) h=0;
21 for (int i=head[now];i;i=e[i].next){
22 int v=e[i].to;
23 if (dis[v]>dis[now]+e[i].w&&e[i].f){
24 dis[v]=dis[now]+e[i].w;
25 pre[v]=i;
26 if (!inq[v]){
27 q[++t]=v;if (t==T) t=0;
28 inq[v]=1;
29 }
30 }
31 }
32 inq[now]=0;
33 }
34 if (dis[T]==inf) return 0;
35 return 1;
36 }
37
38 void updata(){
39 int tmp=T;
40 while (tmp!=S){
41 int l=pre[tmp],v=e[l].to;
42 e[l].f-=1;e[l^1].f+=1;
43 tmp=e[l^1].to;
44 }
45 ans+=dis[T];
46 }
47
48 int main(){
49 scanf("%d%d%d",&n,&m,&K);
50 for(int i=0;i<=n+1;i++)
51 for(int j=0;j<=n+1;j++) d[i][j]=inf;
52 S=0,T=n*2+2;S1=T-1;
53 ins(S,S1,K,0);
54 for (int i=1;i<=n;i++){
55 ins(0,i+n,1,0);
56 ins(i,T,1,0);
57 }
58 for (int i=1;i<=m;i++){
59 scanf("%d%d%d",&u,&v,&w);
60 if (u>v) swap(u,v);
61 d[u][v]=min(d[u][v],w); d[v][u]=d[u][v];
62 }
63 for(int k=0;k<=n;k++)
64 for(int i=0;i<=n;i++)
65 for(int j=0;j<=n;j++)
66 {
67 if(k>i&&k>j) continue;
68 d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
69 if(i==0)ins(S1,j,inf,d[i][j]);
70 }
71 for(int i=1;i<=n;i++)
72 for(int j=i+1;j<=n;j++){
73 ins(i+n,j,inf,d[i][j]);
74 }
75 while(spfa())
76 updata();
77 printf("%d",ans);
78 }