多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

hdoj 4925 Apple tree 【最小割】

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

題目: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; }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本道在线视频 | 亚洲欧美在线精品 | 欧美综合久久 | 羞羞动漫网 | 免费观看影视传媒公司 | 性欧美久久 | 国产在线成人一区二区 | 好大好爽快点吃奶 | 欧美日韩精品国产一区二区 | 国产日产欧美精品一区二区三区 | 羞羞在线观看 | 欧美午夜色大片在线观看免费 | 波多野结衣一区在线 | 亚洲一区日本 | 手机看片国产 | 欧美高清在线精品一区二区不卡 | xx在线视频| 亚洲人成一区 | 国产乱码精品一区二区三区四川 | 中文字幕在线视频网站 | 亚洲一区二区三区麻豆 | 久久久亚洲精品国产 | 国产在线永久视频 | 国产精品欧美视频另类专区 | 国产午夜免费一区二区三区 | 成人欧美在线视频 | 综合免费视频 | 秋霞午夜视频 | 欧美成人久久久免费播放 | 国产在线观看第一页 | 伊人网99 | 亚洲成a人片在线观看精品 亚洲成a人片在线观看尤物 | 亚洲国产成人精品一区91 | 精品欧美成人高清在线观看2021 | 免费看啪啪网站 | 亚欧人成精品免费观看 | xxxxxx国产精品视频 | 欧美做爰gif动态图一区二区 | 中文字幕在线观看一区 | 日本一区免费看 | 欧美另类69xxxx |