題意:
有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 7view code8using
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 }
LA11248 訓練指南 網路擴容 最大流
題意 給定乙個有向網路,每條邊均有乙個容量。問是否存在乙個從點1到點n,流量為c的流。如果不存在,是否可以恰好修改一條弧的容量,使得存在這樣的流?分析 先跑一遍最大流,如果最大流大於等於c,則輸possible。如果最大流小於c,則表明需要修改邊的流量。很顯然,需要修改的弧一定是滿流的弧。但是如果直...
LA3211 訓練指南 飛機排程 2 sat
題意 有n嫁飛機需要著陸。每架飛機都可以選擇 早著陸 和 晚著陸 兩種方式之一,且必須選擇一種。第i架飛機的早著陸時間為ei,晚著陸時間為li,不得在其他時間著陸。你的任務是為這些飛機安排著陸方式,使得整個著陸計畫盡量安全。話句話說,如果把所有飛機的實際著陸時間按照從早到晚的順序排列,相鄰兩個著陸時...
迴圈訓練 抗「疫」居家訓練指南迴圈訓練
為了便於大家居家訓練,在此選擇了迴圈訓練法作為保持體能的針對性方法。一 概念 迴圈訓練法是指根據訓練的具體任務,將練習手段設定為若干個練習站,運動員按照既定順序和路線,依次完成每站練習任務的訓練方法。運用迴圈訓練法可有效地激發訓練情緒,通過交替刺激不同體位累積負荷 痕跡 迴圈訓練法的結構因素有每站的...