【題目描述】
吶,貴樹真的是乙個很帥的男孩子呢,所以好多女孩都給他寫至少一封
了情書。那每個女孩給了貴樹寫了多少情書呢?我們不知道,但是我們知
道一些女孩子寫情書數量的關係,你的任務是推斷出貴樹最少受到了多少
情書。【輸入檔案】
輸入的第一行為兩個整數 n,k,表示一共 n 個女孩,知道 k 對關係
接下來 k 行,每行三個整數 t,a,b
如果 t=1,則表示 a 的情書和 b 的情書數量一樣
如果 t=2,則表示 a 的情書少於 b 的情書數量
如果 t=3,則表示 a 的情書不少於 b 的情書數量
如果 t=4,則表示 a 的情書多於 b 的情書數量
如果 t=5,則表示 a 的情書不多於 b 的情書數量
【輸出檔案】
一行,表示貴樹滿足這些關係時最少情況下收到情書的數量。
如果這些關係不可能同時被滿足,則輸出 -1。
【樣例輸入】
5 71 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
【樣例輸出】
11【資料規模】
對於 30% 資料,保證 n <=100
對於 100% 資料,保證 n <=100000
看完這道題的感受就是「意~」,多麼瑪麗蘇的題目orz,這道題乃某神犇看完秒速五厘公尺後有感而作(ヾ(。`д´。)題意和題目完全沒有關係好嗎woc)
最開始用的方法只過了20分= =,後面的要麼wa,要麼超時,特將錯誤**貼出留作紀念= =
#include#include#includeusing namespace std;
const int inf=0x7f7f7f;
struct node
e[400005];
int t,a,b;
int n,k;
int f[100005];//i個女生最少會給的數量
int num[100005];//每個女生最少會給的數量
bool flag=false;
int main()
for(int i=1;i<=k;i++)
for(int i=1;i<=k;i++)//不能滿足flag=true
if((e[i].cmp==2&&e[j].cmp==3)||(e[i].cmp==4&&e[j].cmp==5))//2,3不能同時滿足
}}
} if(flag==false)
} /*for(int i=1;i<=n;i++)
*/ f[0]=0;
for(int i=1;i<=n;i++)
printf("%d",f[n]);
return 0;
}
其實通過觀察我們可以發現比如三個不等式
,b-a<=k1,c-b<=k2,c-a<=k3,求出c-a的最大值,我們可以把a,b,c轉換成三個點,k1,k2,k3是邊上的權
所以題目就可以通過比較k1+k2和k3大小,求出的就是c-a的最大值了。
所以求解過程實際就是求從a到c的最短路徑。
現在回到這道題上,就需要把不等式轉化為x-y>=z的形式,尋找最長路
#include#include#includeusing namespace std;
int n,k;
struct node
e[400005];
int head[100005];
int m=0;
int queue[100005];
int qhead=0;
int tail=1;
int dis[100005];//記錄增加的情書數量
bool v[100005];
int bb[100005];// 記錄入隊次數
bool flag;
void add(int u,int v,int w)//加邊
void read()
for(int i=1;i<=k;i++)
if(t==3) add(b,a,0);//分類對5種情況進行賦值,當a>=b||a<=b時,因為求最小所以去=的情況,邊的權值賦為0
if(t==5) add(b,a,0);
if(t==2) add(a,b,1);//當a>b||b>a時,邊的權值賦為1
if(t==4) add(b,a,1);
}}void spfa()}}
p1=e[p1].next;}}
int ans=n;//因為每個人至少送1封,所以ans初值為n
if(flag==false)
printf("%d ",ans);
}}int main()
K Candies 差分約束 最短路)
有n個孩子,m個關係 關係分別有3個數u,v,w。代表v的糖果數不能多於u w個,也就是dis v dis u w 這就轉換成 if dis v dis u w dis v dis u w.1 spfa stack include include include include includecon...
2018 08 07 最短路徑 差分約束
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n表示成都的大...
差分約束系統 變相的最短路
之前沒有細看,想不明白這個問題怎麼和最短路扯上關係,細細看了看,也沒明白,原因是在看dijk演算法的時候就沒好搞明白它的 實現,以至於這個問題模擬到最短路實現的時候一臉懵,還去瞅了瞅三角不等式是什麼東西,簡單來說,難就難在圖的構造上面,構造好圖之後就是模板,就是之前的內容了,一起看看這個東西吧,on...