2015-01-07 00:40:57
思路:差分約束題,用si表示 i 距離第1個人的距離。根據條件:(1)約束一:s(b) - s(a) <= c (2)約束二:s(b) - s(a) >= c
因為要求最長可能距離,所以轉化為求最短路。約束一化為:s(b) <= s(a) + c,約束二化為:s(a) <= s(b) + (-c)
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include8 #include 9 #include 10 #include 11 #include 12
using
namespace
std;
13#define lp (p << 1)
14#define rp (p << 1|1)
15#define getmid(l,r) (l + (r - l) / 2)
16#define mp(a,b) make_pair(a,b)
17 typedef long
long
ll;18 typedef unsigned long
long
ull;
19 typedef pairpii;
20const
int inf = (1
<< 30) - 1;21
const
int maxn = 10010;22
23int
t,n,x,y;
24int
first[maxn],ecnt;
25int
cnt[maxn],inq[maxn],dis[maxn];
2627
struct
edgee[maxn << 1
];30
31void add_edge(int u,int v,int
c)37
38bool spfa(int
s)62}63
}64}65
return
true;66
}6768int
main()
81for(int i = 1; i <= y; ++i)
86for(int i = 1; i <= n; ++i)
90if(spfa(1) == false) printf("
-1\n");
91else
if(dis[n] >= inf) printf("
-2\n");
92else printf("
%d\n
",dis[n]);93}
94return0;
95 }
hdu3592(差分約束)
差分約束 學習鏈結 題意 給一些限制條件,求1到n的最大距離,可轉化成求最短路徑,將不等式化成 的形式 有負邊,要用spfa,不能用dijkstra演算法 如下 include include include include include include include include inclu...
HDU 3592(差分約束)
題意 n個人編號分別是1 n在排隊,排隊順序與序號相同。現在有x個喜歡關係和y個厭惡關係 對於每乙個喜歡關係 a b c 代表編號a和編號c之間的距離需要 c 對於每乙個厭惡關係 a b c 代表編號a和編號c之間的距離需要 c 問在能否滿足條件,如果滿足條件求1 n之間的最大距離,如果距離無限大輸...
差分約束 hdu 3666
xij ai l bj 0 xij ai u bj 0 兩邊取對數來去除ai,bj前面的係數 有 logbj logai logxij logu logai log bj logl logxij 化成標準差分約束,建圖,spfa,注意乙個竅門,當入隊總數大於2 n m 時就可以輸出no 因為 乙個點...