日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > hdoj 4925 Apple tree 【最小割】

hdoj 4925 Apple tree 【最小割】

來源:程序員人生   發布時間:2014-10-19 08:00:01 閱讀次數:2788次

題目:hdoj 4925 Apple tree 


來源:2014 Multi-University Training Contest 6


題意:給出一個矩陣,然后每個格子中的數是2^(相鄰格子的個數),然后要求不能取相鄰的數,讓取得數最大。


分析:這個題目有兩種解法,一共是通解,網絡流,另一種是找規律,由于題目中數據是有規律的,所以可以找規律。很多人是這樣做的。

下面給出網絡流的解法,其實就是一個方格取數問題。

就是hdoj 1569 點擊打開鏈接 的版本,只不過數據范圍增大了。不過數據水了。下來一樣的效果,相同的代碼可以ac。

ans = sum - 最小割

詳細思路見上面鏈接:點擊打開鏈接

AC代碼:

#include <cstdio> #include <cstring> #include <iostream> #include <string> #include <algorithm> #include <vector> #include <queue> using namespace std; #define Del(a,b) memset(a,b,sizeof(a)) const int N = 10200; const int inf = 0x3f3f3f3f; int n,m; struct Node { int from,to,cap,flow; }; vector<int> v[N]; vector<Node> e; int vis[N]; //構建層次圖 int cur[N]; void add_Node(int from,int to,int cap) { e.push_back((Node) { from,to,cap,0 }); e.push_back((Node) { to,from,0,0 }); int tmp=e.size(); v[from].push_back(tmp-2); v[to].push_back(tmp-1); } bool bfs(int s,int t) { Del(vis,-1); queue<int> q; q.push(s); vis[s] = 0; while(!q.empty()) { int x=q.front(); q.pop(); for(int i=0; i<v[x].size(); i++) { Node tmp = e[v[x][i]]; if(vis[tmp.to]<0 && tmp.cap>tmp.flow) //第二個條件保證 { vis[tmp.to]=vis[x]+1; q.push(tmp.to); } } } if(vis[t]>0) return true; return false; } int dfs(int o,int f,int t) { if(o==t || f==0) //優化 return f; int a = 0,ans=0; for(int &i=cur[o]; i<v[o].size(); i++) //注意前面 ’&‘,很重要的優化 { Node &tmp = e[v[o][i]]; if(vis[tmp.to]==(vis[o]+1) && (a = dfs(tmp.to,min(f,tmp.cap-tmp.flow),t))>0) { tmp.flow+=a; e[v[o][i]^1].flow-=a; //存圖方式 ans+=a; f-=a; if(f==0) //注意優化 break; } } return ans; //優化 } int dinci(int s,int t) { int ans=0; while(bfs(s,t)) { Del(cur,0); int tm=dfs(s,inf,t); ans+=tm; } return ans; } int solve(int i,int j) { int ans=1; if(i>1) ans*=2; if(j>1) ans*=2; if(i<n) ans*=2; if(j<m) ans*=2; return ans; } int id(int i,int j) { return (i-1)*m+j; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); int s=0,t=m*n+1,x,sum=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { x=solve(i,j); sum+=x; if((i+j)%2) { add_Node(s,id(i,j),x); if(i>1) add_Node(id(i,j),id(i-1,j),inf); if(j>1) add_Node(id(i,j),id(i,j-1),inf); if(i<n) add_Node(id(i,j),id(i+1,j),inf); if(j<m) add_Node(id(i,j),id(i,j+1),inf); } else add_Node(id(i,j),t,x); } } printf("%d ",sum-dinci(s,t)); for(int i=0;i<=t;i++) v[i].clear(); e.clear(); } return 0; }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久久9999 | 天天射天天草 | 99riav视频 | 成人激情视频在线 | 精品国产精品三级精品av网址 | 欧美激情在线精品一区二区三区 | 欧美精品导航 | 性感美女一级毛片 | 国产在线观看一区二区 | 午夜精品久久久久 | 天天看毛片| 亚洲最大成人av | 国产精品精品久久久久久 | 国产中文一区二区三区 | 国产精品一区二区在线 | 天堂中文在线网 | 欧美性一区二区三区 | 99国产视频| 久久精品国产亚洲一区二区三区 | 成人在线免费 | 高清国产一区二区 | 中文字幕国产在线视频 | 亚洲国产精品尤物yw在线观看 | 日韩一级视频 | 日韩精品久久久久久久软件91 | 能在线看的av | 欧美激情视频一区二区三区 | 日韩视频免费 | 精品久久www | 日韩 国产 欧美 | 国产精品区一区二区三 | 色婷婷av久久久久久久 | 综合久久国产九一剧情麻豆 | jizz国产精品| 久久久69 | 最近中文字幕免费视频 | 中文字幕在线亚洲 | 久久国产精品无码网站 | 综合亚洲色图 | 国产一区二区精品在线 | 超碰成人97|