View Code of Problem 14

#include<stdio.h>
#include <string.h>
//shijian jiewei
int main()
{
	int n, t, w, e, i, j, pos, sum, poss = 0, flagg;
	int dis[5000][3], road0, road1, flag[2000];//flag -1 过长 0 未走 1 已走

	scanf("%d %d", &n, &t);
	while ( (n!=0) && (t!=0) )
	{
	    memset(flag, 0, sizeof(int)*t);
	    for (i=0; i<t; i++)
            scanf("%d %d %d", &dis[i][0], &dis[i][1], &dis[i][2]);
        //未清理较长路

        scanf("%d %d", &w, &e);
        sum = 0;
        flagg = 0;

        for (i=0; i<w; i++)
        {
            scanf("%d %d", &road0, &road1);
            if (road0 == e)///
                flagg = 1;
            if (flagg)
                continue;
            pos = -1;
            for (j=0; j<t; j++)
            {
                if ( ( ((road0==dis[j][0]) && (road1==dis[j][1]))|| ((road1==dis[j][0]) && (road0==dis[j][1])) )&& ( flag[j]!=(-1) ) )
                {
                    if ( pos != (-1) )
                    {
                        if (dis[j][2] <= dis[pos][2])
                        {
                            flag[pos] = -1;
                            pos = j;
                        }
                        else
                            flag[j] = -1;
                    }
                    else
                    //if (pos == 0)
                        pos = j;
                }
            }
            if (flag[pos] == 0)
            {
                flag[pos] = 1;
                sum += dis[pos][2];
            }
        }
        poss++;
        printf("Case #%d: %d\n", poss, sum);

        scanf("%d %d", &n, &t);
	}
	return (0);
}

Double click to view unformatted code.


Back to problem 14