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; }

浙公网安备 33010602011771号