bzoj1202 xingxing在努力

        观察这一道题的输入数据我们发现它具有连续的性质, 联系差分约束系统我们同样可以利用差分约束的知识建图,最后判断一下图中有没有矛盾即可。代码如下

 

   

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn = 100 + 10;
const int inf = 0x3f3f3f3f;
int d[maxn][maxn];
int n, m;

bool floyd()
{
    for(int k=0; k<=n; k++)
    for(int i=0; i<=n; i++)
    for(int j=0; j<=n; j++) if(i!=j && d[i][k]!=inf && d[k][j]!=inf)
    {
        if(d[i][j] < d[i][k]+d[k][j])
        {
            return false;
        }
        else if(d[i][j] > d[i][k]+d[k][j])
        {
            if(d[i][j]!=inf) return false;
            d[i][j] = d[i][k] + d[k][j];
        }
    }
    return true;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &n, &m);
        memset(d, 0x3f, sizeof(d));
        for(int i=0; i<=n; i++) d[i][i] = 0;
        for(int i=0; i<m; i++)
        {
            int u, v, c;
            scanf("%d%d%d", &u, &v, &c);
            u--;
            d[u][v] = c;
        }
        if(floyd())
            printf("true\n");
        else
            printf("false\n");
    }
    return 0;
}

 

posted @ 2015-10-31 21:47  xing-xing  阅读(106)  评论(0)    收藏  举报