差分約束:
形如:$x1-x2>=a,x1-x3>=b,x2-x3<=c$
出現這樣式子便要用到差分約束加最短路了。當要求$x1與x3$的最大差值時要用到最短路,所有的式子要轉換成$x1-x2<=a$的形式,當求最小值時用最長路,所有式子轉換為$x1-x2>=a$的形式。至於建圖則需要根據題意確定邊的方向。
題目大意:
n頭牛,從1到n排序,每頭牛按照序號在一條直線排隊,允許乙個位置有多頭牛,有些牛有喜歡的或不喜歡的牛,所以對彼此之間的距離有要求,要求出第1頭牛與第n頭牛之間的最大距離。
解題思路:
求最大距離,用最短路,存在負值,也就有可能有負環,用spfa。因為要判斷能不能排隊,所以要建乙個超級源點,連線所有的牛,並經過所有的邊。
**:
1 #include 2 #include3 #include 4 #include 5 #include 6
using
namespace
std;
7 typedef long
long
ll;8
#define debug(a) cout<<#a<<":"<9
const
int inf=0x3f3f3f3f;10
const
int n=1e6+7;11
const
int mod=1e9+7;12
intmaxn,minn;
13int
t,n;
14int
u,v,w;
15int
dis[n];
16int
vis[n];
17int
cnt[n];
18struct
aap;
21 vectormp[n];
22bool spfa(int
a)41
if(vis[p.u]==0)45
}46}47
}48return
false;49
}50intmain()
59for(int i=1;i<=m2;i++)
65for(int i=1;i)
70if
(spfa(n))
73else
78else81}
82return0;
83 }
POJ 3169 Layout(差分約束)
題目大意 當排隊等候餵食時,奶牛喜歡和它們的朋友站得靠近些。fj有n 2 n 1000 頭奶牛,編號從1到n,沿一條直線站著等候喂 食。奶牛排在隊伍中的順序和它們的編號是相同的。因為奶牛相當苗條,所以可能有兩頭或者更多奶牛站在同一位置上。即使說,如果我們想象奶牛是站在一條數軸上的話,允許有兩頭或更多...
POJ3169 Layout 差分約束)
題意 一堆牛在一條直線上按編號站隊,在同一位置可以有多頭牛並列站在一起,但編號小的牛所佔的位置不能超過編號大的牛所佔的位置,這裡用d i 表示編 號為i的牛所處的位置,即要滿足d i d i 1 0,同時每兩頭牛之間有以下兩種關係 對於輸入的a b d來說 1 如果是喜歡關係 即需要滿足d b d ...
POJ3169 Layout 差分約束
題目鏈結。分析 對於任意i號奶牛,1 id i 1 d i 0 對於每個好感的描述 i,j,k 假設i j,體現到距離上的要求就是 d j d i k 對於每個反感的描述 i,j,k 假設i j,體現到距離上的要求就是 d j d i k 寫成我們約定的形式 d i d i 1 0 d j d i ...