Example #1
0
int main()
{
    //freopen("in.cpp","r",stdin);
	 int T,m, i, j,k, f, t, d,root;
	 int cas=1;
    scanf("%d", &T);
	 while(T--)
	 {
	     printf("Case %d: ",cas++);
		scanf("%d %d %d", &n, &m,&root);
		root++;
		for(i = 1; i <= n; ++i)
			for(j = i; j <= n; ++j)
				e[i][j] = e[j][i] = INF;
		for(i = 0; i < m; i++)
		{
			scanf("%d%d%d", &f, &t, &d);
			++f;
			++t;
			e[f][t] = d;
		}
		cnt = 0;
		memset(u, false, sizeof(u));
		dfs(root);
		if(cnt != n) puts("impossible");
		else {
			ans = 0;
			zhuliu(root);
			printf("%d\n",ans);
		}
	}
	return 0;
}
int main()
{
    while (scanf("%d%d",&n,&m) != EOF)
    {
        init(n);
        for (int i = 0; i < m; i++)
        {
            scanf("%d%d%d",&u,&v,&cost);
            if (u == v) continue;
            dis[u][v] = std::min(dis[u][v],cost);
        }
        L = 0;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                if (dis[i][j] != inf)
                {
                    e[L].u = i;
                    e[L].v = j;
                    e[L++].cost = dis[i][j];
                }
        printf("%d\n",zhuliu(0,n,L,e));
    }
    return 0;
}