国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

51nod 1442 士兵的旅行 【 網絡費用流 (還存在bug) 】

2019-11-08 01:55:32
字體:
來源:轉載
供稿:網友

1442 士兵的旅行題目來源: CodeForces基準時間限制:1 秒 空間限制:131072 KB 分值: 160 難度:6級算法題 收藏 關注

在某個國家有n個城市,他們通過m條無向的道路相連。每個城市有一支軍隊。第i個城市的軍隊有ai個士兵。現在士兵開始移動。每個士兵可以呆在原地,或者走到和他所在城市直接相鄰的城市,即設每一條邊長度為1的話,他離開之后不能距離原來城市大于1。

判斷移動之后,能不能使得第i個城市恰好有bi個士兵。

Input
單組測試數據。第一行有兩個整數n和m(1 ≤ n ≤ 100, 0 ≤ m ≤ 200)。第二行包含n個整數 a1, a2, ..., an (0 ≤ ai ≤ 100)。第三行包含n個整數b1, b2, ..., bn (0 ≤ bi ≤ 100)。接下來m行,每行給出兩個整數 p 和q (1 ≤ p, q ≤ n, p ≠ q),表示p和q之間有一條無向的道路。每兩個城市之間最多有一條無向的道路。Output
如果能夠調整成功,輸出YES,否則輸出NO。Input示例
4 41 2 6 33 5 3 11 22 33 44 2Output示例
YES

構造源點和匯點----然后直接最大流救過了--------------沒有考慮只能到相鄰點--------數據有點弱

代碼:

#include<cstdio>#include<vector>#include<cstring>#include<algorithm>using namespace std;struct node{int to,cost,cap,ffv;}OP;vector<node>V[120];int n,m,dist[110],PRe1[110],pre2[110],aa[110];void add_edge(int a,int b,int c){    OP.to=b;OP.cost=1;OP.cap=c;OP.ffv=V[b].size();    V[a].push_back(OP);    OP.to=a;OP.cost=-1;OP.cap=0;OP.ffv=V[a].size()-1;    V[b].push_back(OP);}bool tyuyi(int s,int t,int F){    int INF=55555;    while (F)    {        fill(dist,dist+n+1,INF);        fill(pre1,pre1+n+1,-1);        fill(pre2,pre2+n+1,-1);        dist[s]=0;        bool update=true;        while (update)        {            update=false;            for (int i=1;i<=n;i++)            {                if (dist[i]==INF) continue;                for (int j=0;j<V[i].size();j++)                {                    if (V[i][j].cap>0&&dist[i]+V[i][j].cost<dist[V[i][j].to])                    {                        update=true;                        dist[V[i][j].to]=dist[i]+V[i][j].cost;                        pre1[V[i][j].to]=i;pre2[V[i][j].to]=j;                    }                }            }        }        if (dist[t]==INF) return false;        F--;int k=t,h;        while (pre1[k]!=-1)        {            h=pre2[k];            k=pre1[k];            V[k][h].cap--;            V[V[k][h].to][V[k][h].ffv].cap++;        }    }    return true;}int main(){    int a,b,c,s1,s2;    scanf("%d%d",&n,&m);    s1=s2=0;    for (int i=1;i<=n;i++)    {        scanf("%d",&c);        s1+=c;        aa[i]=c;        add_edge(n+1,i,c);    }    for (int i=1;i<=n;i++)    {        scanf("%d",&c);        s2+=c;        add_edge(i,n+2,c);    }    while (m--)    {        scanf("%d%d",&a,&b);        add_edge(a,b,aa[a]);        add_edge(b,a,aa[b]);    }    n+=2;    if (s1!=s2)    {        printf("NO/n");        return 0;    }    bool fafe=tyuyi(n-1,n,s1);    if (fafe)        printf("YES/n");    else        printf("NO/n");    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铜梁县| 霍林郭勒市| 大冶市| 左贡县| 富平县| 犍为县| 海兴县| 杭州市| 大城县| 蛟河市| 鸡西市| 寿宁县| 平昌县| 札达县| 绍兴市| 清新县| 射洪县| 临城县| 霍山县| 南丰县| 宁波市| 贺州市| 青岛市| 柞水县| 吉水县| 刚察县| 宁德市| 洪湖市| 堆龙德庆县| 凉城县| 静安区| 青岛市| 丹阳市| 松江区| 肇州县| 张北县| 武夷山市| 棋牌| 抚顺县| 桦川县| 旌德县|