描述 description
很不幸,有時候奶牛會不小心踩到電腦上,農夫約翰的車也可能碾過電腦,這台倒霉的電腦就會壞掉。這意味著這台電腦不能再傳送電郵了,於是與這台電腦相關的連線也就不可用了。
有兩頭奶牛就想:如果我們兩個不能互發電郵,至少需要壞掉多少臺電腦呢?請編寫乙個程式為她們計算這個最小值和與之對應的壞掉的電腦集合。
以如下網路為例:
1*/
3 - 2*
這張圖畫的是有2條連線的3臺電腦。我們想要在電腦1和2之間傳送資訊。電腦1與3、2與3直接連通。如果電腦3壞了,電腦1與2便不能互發資訊了。
輸入格式 input format
第一行四個由空格分隔的整數:n,m,c1,c2.n是電腦總數(1<=n<=100),電腦由1到n編號。m是電腦之間連線的總數(1<= m<=600)。最後的兩個整數c1和c2是上述兩頭奶牛使用的電腦編號。連線沒有重複且均為雙向的(即如果c1與c2相連,那麼c2與c1也相連)。兩台電腦之間至多有一條連線。電腦c1和c2不會直接相連。 第2到m+1行 接下來的m行中,每行包含兩台直接相連的電腦的編號。
輸出格式 output format
輸出共有兩行。第一行是使電腦c1和c2不能互相通訊需要壞掉的電腦數目的最小值。第二行是排好序的壞掉的電腦的編號列表。注意c1和c2都不能壞掉。如果有多種可能情況,輸出第乙個數最小的一種,如果第乙個數相同,則輸出第二個數最小的一種,依此類推。
樣例輸入 sample input
3 2 1 2
1 32 3
樣例輸出 sample output
13 時間限制 time limitation
1s注釋 hint
1s** source
usaco 5.4.5
思路:這道題就是乙個裸的最小割,先把圖建好然後跑一邊最大流就是最小割然後在將某個點刪除看看最小割是不是減小,如果減小
則記錄下這個點,這個點就是從start到end需要踩壞的電腦(奶牛也是真的有錢哇)然後輸出即可。
**如下:
#include#includeview code#include
#include
#include
#define inf 0x7fffffff
using
namespace
std;
struct
edge
a[31000],c[31000
];int lin[31000
];int rev[31000
];int l[1000
];int len=0
;int q[31000
];int
n,m,s,e;
bool f[1000
];int ans1[1000
];void insert(int x,int y,int
v)bool
make_level()}}
return l[e]>=0;}
int max(int k,int
flow)}}
if(!maxflow)
l[k]=-1
;
return
maxflow;
}int sum=0
;bool check=true
;void
dinic()
intmain()
else
if(y==s)//
如果y是起點
else
if(x==e)//
如果x為終點
else
if(y==e)//
如果y為終點
else
}for(int i=1;i<=n;i++)//
如果不是起點和終點就將每個點拆成i和i'
if(i!=s&&i!=e)
insert(i,i+n,1
); memcpy(c,a,
sizeof
(c));
dinic();
cout
int ans=sum;
for(int i=1;i<=n;i++)
for(int i=1;i<=ans1[0];i++)
cout
return0;
}
洛谷 P1342 請柬
這道題很適合作為p1629的加強版 因為這道題其實體現了反向建圖的高效性 反向建圖後 單終點最短路徑 單源最短路徑。因此兩邊dij,然後再累計和即可 部分不難弄。直接上 先說明以下程式,有1的變數名與第一次dij有關 學生出來 帶2的與第二次dij有關 學生回家 include include in...
洛谷P1342請柬
核心思想 兩遍最短路.1號點去各地的時間直接套最短路模板,各地到1號點時間用逆向思維,視為求1號點沿反邊到各地的時間即可.include include include include include define re register using namespace std const int ...
洛谷 P1342 請柬
在電視時代,沒有多少人 戲劇表演。malidinesia古董喜劇演員意識到這一事實,他們想宣傳劇院,尤其是古色古香的喜劇片。他們已經列印請帖和所有必要的資訊和計畫。許多學生被雇來分發這些請柬。每個學生志願者被指定乙個確切的公共汽車站,他或她將留在那裡一整天,邀請人們參與。這裡的公交系統是非常特殊的 ...