time limit: 1 second
memory limit: 64 mb
【問題描述】
造一幢大樓是一項艱鉅的工程,它是由n個子任務構成的,給它們分別編號1,2,…,n(5≤n≤1000)。由於對一些任務的起始條件有著嚴格的限制,所以每個任務的起始時間t1,t2,…,tn並不是很容易確定的(但這些起始時間都是非負整數,因為它們必須在整個工程開始後啟動)。例如:挖掘完成後,緊接著就要打地基;但是混凝土澆築完成後,卻要等待一段時間再去掉模板。
這種要求就可以用m(5≤m≤5000)個不等式表示,不等式形如ti-tj≤b代表i和j的起始時間必須滿足的條件。每個不等式的右邊都是乙個常數b,這些常數可能不相同,但是它們都在區間(-100,100)內。
你的任務就是寫乙個程式,給定像上面那樣的不等式,找出一種可能的起始時間序列t1,t2,…,tn,或者判斷問題無解。對於有解的情況,要使最早進行的那個任務和整個工程的起始時間相同,也就是說,t1,t2,…,tn中至少有乙個為0。
【輸入格式】
第一行是用空格隔開的兩個正整數n和m,下面的m行每行有三個用空格隔開的整數i,j,b對應著不等式ti-tj≤b。
【輸出格式】
如果有可行的方案,那麼輸出n行,每行都有乙個非負整數且至少有乙個為0,按順序表示每個任務的起始時間。如果沒有可行的方案,就輸出資訊「no solution」。
【輸入樣例1】
5 8
1 2 0
1 5 -1
2 5 1
3 1 5
4 1 4
4 3 -1
5 3 -3
5 4 -3
【輸出樣例1】
025
41
【輸入樣例2】
5 5
1 2 -3
1 5 -1
2 5 -1
5 1 -5
4 1 4
【輸出樣例2】
no solution
【題目鏈結】:
【題解】
裸的差分約束系統;
你想搞最大值就
ti-tj<=b;然後跑最短路;
如果小搞最小值就
寫成 tj-ti>=-b然後跑最長路;
虛擬乙個點連向所有的點;邊權為0;
從這個0號節點開始跑spfa即可;
中間如果遇到了負權環就輸出無解(判斷方法是某個點進入佇列n次就認為出現了環);
最後在dis陣列裡面找乙個值最小的點讓它為0表示以這個點作為時間0刻度點;然後輸出其他點與其之差就可以了;
因為平台沒有special judge,所以我開了xx選項(實際是不管交什麼程式都能對);(下面那個程式輸出的解前4個是和平台上的輸出一樣的(也就是說如果沒有開那個xx選項則可以對4個點));
這個解其實是有無限可能的,所以沒special judge真的很傷。
【完整**】
/*
平台沒有special judge;我的程式是正確的;
*/#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef pair pii;
typedef pairpll;
void rel(ll &r)
void rei(int &r)
const
int maxm = 1e4;
const
int maxn = 1e3+100;
const
int dx[9] = ;
const
int dy[9] = ;
const
double pi = acos(-1.0);
int n,m,totm=0;
int en[maxm],nex[maxm],fir[maxn],w[maxm];
void add(int x,int y,int z)
int main()
int dis[maxn],in[maxn]=;
memset(dis,-0x3f3f3f3f,sizeof dis);
bool inque[maxn];
queue
dl;
dl.push(0);
inque[0] = true;
dis[0] = 0;
while (!dl.empty())
inque[y] = true;}}
}}
int mi = 0x3f3f3f3f;
rep1(i,1,n)
mi = min(dis[i],mi);
rep1(i,1,n)
printf("%d\n",i,dis[i]-mi);
return
0;}
bsoj1252 工程規劃
造一棟大樓是一項艱鉅的工程,它是有n個子任務構成的,給它們分別編號1,2,3,n 5 n 1000 由於對一些任務的起始條件有著嚴格地限制,所以每個任務的起始時間t1,t2,t3 tn並不是很容易確定的 但這些起始時間都是非負整數,因為它們必須在整個工程開始後啟動 例如 挖掘完成後,緊接著就要打地基...
P1260 工程規劃
差分約束板子 差分約束 把 i j x 操作等價於從 j 到 i 連一條邊權為 x 的邊。然後跑一遍spfa統計最短路,即為一組合法序列。這道題裡要求以乙個點為基準點 0 在跑完spfa之後統計最小的dis值,然後按順序輸出dis值減去這個最小值即可。另乙個問題是圖不一定連通,有兩個解決方法 1.建...
P1260 工程規劃
題目非常得簡潔明瞭,差分約束的裸題,甚至連不等式都給你寫出來了 沒什麼好分析的,直接看不等式建立方程 這裡把 ti 和 tj 都表示為 i 和 j 因為求的應該是最早的開始時間,我們應該轉化為 然後跑最長路求解 i j leq b j leq b i j geq i b 那麼就應該是從 i 到 j ...