社区讨论

关于差分约束题目连边方式的疑问

P3275[SCOI2011] 糖果参与者 12已保存回复 13

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
13 条
当前快照
1 份
快照标识符
@mi6z5b1h
此快照首次捕获于
2025/11/20 13:12
4 个月前
此快照最后确认于
2025/11/20 15:41
4 个月前
查看原帖
这题大部分人都是按照不等式 XaXb>=CX_a - X_b >= C 建的正权边,边权为 0011,跑最长路,判断正环。我是 XaXb<=CX_a - X_b <= C 建了负权边,边权 001-1,跑最短路,判负环。按照一般差分约束连边方向,应该是 XbXaX_b \rightarrow X_a。但是我只有写成 XaXbX_a \rightarrow X_b 才能 AC,否则 WA 三个点(开 longlong 了):
CPP
        std::swap(a, b); // 去掉这一句 wa 三个点
        if (opt == 1)       {  g[b].push_back(Edge(a,  0));  g[a].push_back(Edge(b, 0)); }  // a = b,      a - b <= 0, b - a <= 0
        else if (opt == 2)  {  g[b].push_back(Edge(a, -1));                              }  // a < b,      a - b <= -1
        else if (opt == 3)  {  g[a].push_back(Edge(b,  0));                              }  // a >= b,     b - a <= 0
        else if (opt == 4)  {  g[a].push_back(Edge(b, -1));                              }  // a > b,      b - a <= -1
        else if (opt == 5)  {  g[b].push_back(Edge(a,  0));                              }  // a <= b,     a - b <= 0
求助大佬 dddlt

回复

13 条回复,欢迎继续交流。

正在加载回复...