xww是個影響力很大的人,他有很多的追隨者。這些追隨者都想要加入xww教成為xww的教徒。但是這並不容易,需要通過xww的考核。
xww給你出了這麼乙個難題:xww給你乙個n*n的正實數矩陣a,滿足xww性。
稱乙個n*n的矩陣滿足xww性當且僅當:(1)a[n][n]=0;(2)矩陣中每行的最後乙個元素等於該行前n-1個數的和;(3)矩陣中每列的最後乙個元素等於該列前n-1個數的和。
現在你要給a中的數進行取整操作(可以是上取整或者下取整),使得最後的a矩陣仍然滿足xww性。同時xww還要求a中的元素之和盡量大。
第一行乙個整數n,n ≤ 100。
接下來n行每行包含n個絕對值小於等於1000的實數,最多一位小數。
輸出一行,即取整後a矩陣的元素之和的最大值。無解輸出no。
43.1 6.8 7.3 17.2
9.6 2.4 0.7 12.7
3.6 1.2 6.5 11.3
16.3 10.4 14.5 0
129【資料規模與約定】
有10組資料,n的大小分別為10,20,30...100。
【樣例說明】
樣例中取整後滿足xww性的和最大的矩陣為:
3 7 8 18
10 3 0 13
4 1 7 12
17 11 15 0
題解:顯然有上下界最大流,建邊?自己yy去~
好吧還是說一下。
我們設行之和對應的點為xi,列之和對應的點為yj
1.s->xi,下界是行之和的下整,上界是行之和的上整
2.yj->t,下界是列之和的下整,上界是列之和的上整
3.xi->yj,下界是(i,j)的下整,上界是(i,j)的上整
由於是有上下界的網路流,所以要新建ss,tt和t->s的inf的邊,那麼最大流是什麼呢?先跑ss->tt的可行流,判斷是否滿流,不滿流則判無解,然後記錄t->s這條邊的反向邊的流量x1,再刪掉ss,tt和t->s這條邊,跑從s到t的最大流x2,ans=x1+x2
#include #include #include #include #include using namespace std;int n,cnt,s,t,ans,ss,tt,tot,ms,mt;
int to[1000000],next[1000000],val[1000000],head[10000],d[10000];
int v[110][110],si[110],sj[110];
queueq;
void add(int a,int b,int c)
int dfs(int x,int mf)
} return mf-temp;
}int bfs()
} }return 0;
}int main()
else if(i==n)
else
}} add(s,tt,ms),add(ss,t,mt),add(t,s,1<<30);
while(bfs()) tot-=dfs(ss,1<<30);
if(tot)
ans+=val[cnt-1],val[cnt-2]=val[cnt-1]=0;
for(i=head[ss];i!=-1;i=next[i]) val[i]=val[i^1]=0;
for(i=head[tt];i!=-1;i=next[i]) val[i]=val[i^1]=0;
ss=s,tt=t;
while(bfs()) ans+=dfs(ss,1<<30);
printf("%d",ans*3);
return 0;
}
BZOJ3698 XWW的難題 網路流
time limit 10 sec memory limit 128 mb submit 533 solved 275 submit status discuss xww是個影響力很大的人,他有很多的追隨者。這些追隨者都想要加入xww教成為xww的教徒。但是這並不容易,需要通過xww的考核。xww給...
BZOJ 3698 XWW的難題 上下界網路流
下界為各數下取整的值,取差建立超級源匯點ss,tt跑一遍dinic,先判斷是否可以滿流,然後再跑原圖,ans 3 原值算一遍,右邊算一遍,下邊算一遍 詳見 include include include include define inf 0x7fffffff define db double u...
3698 XWW的難題 有源匯上下界最大流
time limit 10 sec memory limit 128 mb submit 354 solved 178 submit status discuss xww是個影響力很大的人,他有很多的追隨者。這些追隨者都想要加入xww教成為xww的教徒。但是這並不容易,需要通過xww的考核。xww給...