LA2531 訓練指南 足球聯賽 最大流

2022-05-27 14:15:11 字數 1948 閱讀 4225

題意:

有n支隊伍進行比賽,每支隊伍需要打的比賽數目相同。每場比賽恰好一支隊伍勝,另一支敗。給出每支隊伍目前勝的場數和敗的場數,以及每兩支隊伍還剩下的比賽場數,確定所有可能的冠軍的球隊。(獲勝場數最多的是冠軍,可以並列)。

分析乙隻隊伍如果可能得冠軍,那麼就一定可以通過調整,未來的幾場比賽的結果使自己贏得場次最多。否則便不可能成為冠軍。

在判斷第i支隊伍有無可能成為冠軍時:首先,第i支隊伍得對局i全部取得勝利,得到i勝利的總場數為total。然後判斷其他隊伍的對局,能否互相限制使得,任何隊伍勝利的場數都不超過total。

建模方法:

對每兩支隊伍(u,v)構造乙個x結點,從s引一條弧過來,容量為這兩支隊伍還需要比賽的場數。對每支隊伍u構造乙個y結點,引一條弧到t,容量為total-win[u].然後每個(u,v)結點向u和v結點個連一條無窮大得弧。這樣當且僅當,從s出發得每條弧都是滿載得時候,當前隊伍才有可能得冠軍。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

8using

namespace

std;

9const

int maxn=1000+10;10

const

int maxn=30;11

const

int maxm=30000+100;12

const

int inf=2147000000;13

struct

dinic

23void add_edge(int a,int b,int

c)33

bool

bfs()48}

49}50return

vis[t];51}

52int dfs(int x,int

a)64}65

return

flow;66}

67int maxflow(int s,int

t)75

return

flow;76}

77}dinic;

78int

t,n;

79int

win[maxn],lose[maxn];

80int

g[maxn][maxn];

81 vectorans;

82bool judge(int

num)

87//

cout<88

89int alls=(n*n-3*n+2)/2;90

int num=0

;91 dinic.init(alls+n+2

);92 dinic.s=0,dinic.t=alls+n+1;93

for(int i=1;i<=n;i++)

103}

104105

for(int i=1;i<=n;i++)

110 dinic.maxflow(0,alls+n+1

);111

for(int i=0;i<=dinic.sz;i+=2

)116

}117

return

true

;118

}119

intmain()

128for(int i=1;i<=n;i++)

132}

133/*

if(judge(1))

134printf("yes 1");

*/135

136for(int i=1;i<=n;i++)

140sort(ans.begin(),ans.end());

141for(int i=0;i)

145 printf("\n"

);146

}147

return0;

148 }

view code

LA11248 訓練指南 網路擴容 最大流

題意 給定乙個有向網路,每條邊均有乙個容量。問是否存在乙個從點1到點n,流量為c的流。如果不存在,是否可以恰好修改一條弧的容量,使得存在這樣的流?分析 先跑一遍最大流,如果最大流大於等於c,則輸possible。如果最大流小於c,則表明需要修改邊的流量。很顯然,需要修改的弧一定是滿流的弧。但是如果直...

LA3211 訓練指南 飛機排程 2 sat

題意 有n嫁飛機需要著陸。每架飛機都可以選擇 早著陸 和 晚著陸 兩種方式之一,且必須選擇一種。第i架飛機的早著陸時間為ei,晚著陸時間為li,不得在其他時間著陸。你的任務是為這些飛機安排著陸方式,使得整個著陸計畫盡量安全。話句話說,如果把所有飛機的實際著陸時間按照從早到晚的順序排列,相鄰兩個著陸時...

迴圈訓練 抗「疫」居家訓練指南迴圈訓練

為了便於大家居家訓練,在此選擇了迴圈訓練法作為保持體能的針對性方法。一 概念 迴圈訓練法是指根據訓練的具體任務,將練習手段設定為若干個練習站,運動員按照既定順序和路線,依次完成每站練習任務的訓練方法。運用迴圈訓練法可有效地激發訓練情緒,通過交替刺激不同體位累積負荷 痕跡 迴圈訓練法的結構因素有每站的...