題意:某個冰塊上有a只企鵝,總共可以跳出去b只,問是否可能所有的企鵝都跳到某一塊冰塊上,輸出所有的可能的冰塊的編號。
由於每個點只能跳出去m只企鵝,所以要拆點
假如不拆點,乙個點到另乙個點可能會跳多於m只企鵝
通過拆點後u->u'間的容量來完成題目的要求(對點的一些限制)
建圖:i->i+n 容量為m i+n->j容量為inf
新建源點s,s->i的容量為i點企鵝的個數
然後列舉匯點求最大流就可以判斷某個點是否符合條件
view code
#include#include
#include
#include
using
namespace std;
const
double eps = 1e-8;
const
int max=10000;
const
int inf=1000000000;
struct point p[200];
double d;
double dis(point a,point b)
struct
edge[1000000];
int e,head[max];
int gap[max],cur[max];
int pre[max],dis[max];
void add_edge(int s,int t,int c,int cc)
int min(int a,int b)
maxflow+=aug;
aug=-1;
}goto loop;}}
int mindis=n;
for(i=head[u];i!=-1;i=edge[i].next)
return maxflow;
}int main()
for(i=1;i<=n;i++)}}
int flag=0;
for(i=1;i<=n;i++)
for(j=0;j2) edge[j].c+=edge[j^1].c,edge[j^1].c=0; //
每次流完之後恢復原圖
}if(!flag) printf("
-1\n
");else printf("
\n");
}}
POJ 3498 拆點 最大流
大概題意 在南極的海洋上,有一些企鵝站在一些浮冰上,這些企鵝想聚在一塊,也就是到某塊浮冰上聚會,但是它們不想游泳,只想從一塊浮冰跳到另一塊上,自身的跳躍距離題中已經給出來了,然後是每個浮冰的座標,該浮冰上已經有個多少個企鵝,以及浮冰的承受能力,所謂承受能力不是指能載動多少企鵝,題目中說了每個浮冰載企...
POJ 3498 拆點 最大流
大概題意 在南極的海洋上,有一些企鵝站在一些浮冰上,這些企鵝想聚在一塊,也就是到某塊浮冰上聚會,但是它們不想游泳,只想從一塊浮冰跳到另一塊上,自身的跳躍距離題中已經給出來了,然後是每個浮冰的座標,該浮冰上已經有個多少個企鵝,以及浮冰的承受能力,所謂承受能力不是指能載動多少企鵝,題目中說了每個浮冰載企...
poj 3498 最大流 拆點
思路 首先設乙個超級源點,將源點與各地相連,邊容量為各點目前的企鵝數量,然後就是對每個冰塊i進行拆點了 i,i n 邊容量為能夠接受的受損程度,這樣就把點權問題轉化為邊權問題了,然後就是對於那些能夠相互跳躍的冰塊之間連邊 i n,j j n,i 邊容量為inf。最後就是列舉匯點看是否等於總數。1 i...