差分約束,常見的板子類題目,但又不太板子,稍微總結一下:
\(1.\)常見的差分約束,將不等式轉化為\(spfa\)的鬆弛操作,注意最短路與最長路的區分即可。
較為板子的板子,如果有\(x_i-x_j\leq d\),建邊\(j\)向\(i\),邊權為\(d\),跑最短路,這是我們最開始的想法,但是這一題告訴我們了乙個重要的事情,我們要從\(0\)向\(x_i\)建一條邊權為\(0\)的邊,先從\(0\)跑一遍\(spfa\),再從\(1\)跑一遍,因為我們不能保證圖的連通性……
#includeusing namespace std;
inline int read()
while(x!=eof&&x>='0'&&x<='9')
return w*f;
}const int n=30010;
int n,ml,md,num_edge,ans;
int head[n<<1],cnt[n],dis[n],vis[n];
struct edge edge[n<<1];
inline void add(int from,int to,int dis)
inline void spfa(int s)
if(!vis[edge[i].to]) q.push(edge[i].to),vis[edge[i].to]=1;
}
}}int main()
\(2.\)特殊型別的差分約束
我們設\(max[i][j]\)表示\(i,j\)的最大可能差值,\(min[i][j]\)表示\(i,j\)的最小可能差值,直接跑\(floyd\)即可,這類題的特殊之處在於其設的不同,並不是單純地跑最短路。
#includeusing namespace std;
inline int read()
while(x!=eof&&x>='0'&&x<='9')
return w*f;
}const int n=70;
int n,a,b,num_edge,max[n][n],min[n][n],ans1,ans2,ans3;
int main()
printf("%d %d %d",ans1,ans2,ans3);
}
這一題題意需要簡化後才能出來思路,先看到找答案,顯然二分,然後考慮判斷答案是否合法。
顯然我們要把圖重建一遍,但是所謂的「**\(flag\)「該怎麼辦?考慮乙個人在什麼情況下要**,當\(i\)立了乙個\(flag\)曰:「我沒\(k\)倍殺選手\(j\),我就**時」,如果他不滿足\(x_i>x_j*k\)時就會被強迫**。
同理,當\(i\)立了」選手y把我kkk倍殺,我就**「,如果他不滿足\(x_i>x_j*\frac\)時就會被強迫**。
對於選手\(i\)固定的分數\(x\),我們建邊\(0\)到\(i\),邊權為\(x\),建邊\(i\)到\(0\),邊權為\(\frac\)。
此時我們將最短路求和轉化為最短路求積即可,如果要取模,就取\(log\),但這一題並不要。(我記得某個毒瘤學長就出了這樣的一道題……)
#includeusing namespace std;
inline int read()
while(x!=eof&&x>='0'&&x<='9')
return w*f;
}const int n=30010;
const double eps=1e-8;
double dis[n],x[n];
int n,fls,cos,num_edge;
int head[n<<1],cnt[n],vis[n],c[n];
struct flag oier[n];
struct edge edge[n<<1];
inline void add(int from,int to,double dis)
inline bool spfa(int s)}}
return 0;
}inline bool check(double t)
int main()
//coutans==-1?puts("-1"):printf("%.10lf\n",ans);
}
差分約束 總結
如果乙個系統由n個變數和m個約束條件組成,其中每個約束條件形如xj xi bk i,j 1,n k 1,m 則其為差分約束系統 system of difference constraints 亦即,差分約束系統是關於一組變數的特殊不等式組。求解差分約束系統,可以轉化成圖論的單源最短路徑問題。觀察x...
差分約束總結
差分約束其實主要靠思想 一 概念 就當這是放屁 給你提供幾個要滿足的條件,然後詢問滿足條件的情況,差分約束就是通過構造圖之類的東西來優化暴力,成為ac 二 大概理解 1.給定很多個條件 形如 ai aj k 我們試圖轉換一下 ai aj k 差不多是廢話 但是,有沒有覺得這個式子有點眼熟,沒錯,就是...
差分約束系統總結
差分約束系統可以看成是線性規劃的一種特殊情況,可以通過歸約到圖論中的最短路問題求解。差分約束系統是若干形如 x i xj ck 的二元差分不等式組成的約束條件,對於差分約束系統的問題,通常是讓你求其中兩個變數差值的最小值mi n xi xj 或最大值ma x xi xj 求最小值mi n xi xj...