正著求不太好求,,但是不是剪刀石頭布的又很好表示:三個人中恰好有乙個人贏了兩場。 所以我們考慮讓這種三元組數量最少使得剪刀石頭布最多。
考慮乙個人如果贏了i場,那麼他對 非剪刀石頭布的三元組的貢獻是 -> i(i-1)/2 ,也就是他和任意兩個被他擊敗的人都可以組成三元組。並且每個人的貢獻都是獨立的,不會有重複(因為乙個非法三元組只可能有乙個人是贏兩局的)。
所以我們就可以用類似 平方費用 的最小費用流 求解此題了。
#include#define ll long long#define pb push_back
using namespace std;
const int maxn=11005;
const int inf=1<<30;
vectorg[maxn];
struct linesl[maxn*23];
int s,t,t=-1,d[maxn],a[maxn],p[maxn];
int g[105][105],id[105][105],cnt;
int n,m,ans,awin[105];
bool iq[maxn];
inline void add(int from,int to,int cap,int cost),g[from].pb(t);
l[++t]=(lines),g[to].pb(t);
}inline bool spfa()
} iq[x]=0;
} if(d[t]==d[t+1]) return 0;
ans-=a[t]*d[t];
int now=t,pre;
while(now!=s)
return 1;
}inline void mfmc()
int main()}}
printf("%d\n",ans);
for(int i=1;i<=n;i++)
return 0;
}
Wc2007 剪刀石頭布
題目描述 bzluogu 題解 最小費用流。對於三支隊伍,勝負情況只有 2 種。一種是形成三元環,另一種是 x 贏兩場,y 贏一場,z 沒贏過。所以我們統計一下另一種最少有多少種就好了。最後答案就是 c 3 n k 對於乙個隊伍 x 若其勝場數為 w x 則會造成的負貢獻為 c 2 不會搞?作差啊。...
WC2007 剪刀石頭布 Solution
給一張競賽圖,圖中還有一些邊沒有定向,現在要把它們重新定向,要求重定向之後三元環盡量多。直接考慮不可取,逆向思維。算出極限情況可能出現三元環的個數,那麼就是n n 1 n 2 6 dfrac 6n n 1 n 2 接下來考慮什麼情況會拆毀三元環。考慮乙個點的負場情況來判斷少了多少三元環。如果乙個點負...
Wc2007 剪刀石頭布(費用流)
time limit 20 sec memory limit 128 mb sec special judge 在一些一對一遊戲的比賽 如下棋 桌球和羽毛球的單打 中,我們經常會遇到a勝過b,b勝過c而c又勝過a的有趣情況,不妨形象的稱之為剪刀石頭布情況。有的時候,無聊的人們會津津樂道於統計有多少這...