description
input
第一行給出數字n,m代表行列數.n,m均小於等於100 下面n行m列用於描述數字矩陣
output
輸出最多可以拿到多少塊寶石
sample input
2 21 2
2 1sample output
4可以發現,所有能取得寶石的點必定是不相鄰的,如果本題點權都為1,我們只需要建立二分圖然後求最大獨立點集即可。但是這題有點權,也就是變成了求最大帶權獨立點集,那麼我們考慮不用二分圖,使用網路流,從源點向所有白點連一條流量為點權的邊,所有黑點向匯點連一條流量為點權的邊,所有白點向其相鄰的黑點連邊,答案即為總點權減去最小割
/*program from wolfycz*/
#include#include#include#include#include#define inf 0x7f7f7f7f
#define lowbit(x) ((x)&-(x))
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline char gc()
inline int frd()
inline int read()
inline void print(int x)
const int n=1e4,m=6e4;
const int dx[4]=;
const int dy[4]=;
int pre[m+10],now[n+10],child[m+10],val[m+10];
int h[n+10],deep[n+10];
int n,m,s,t,ans,tot=1;
void join(int x,int y,int z)
void insert(int x,int y,int z)
bool in_map(int x,int y)
int g(int x,int y)
bool bfs()
} }return 0;
}int dfs(int x,int v)
} if (!ans) deep[x]=-1;
return ans;
}int main()
}else insert(g(i,j),t,v);
} }while (bfs()) ans-=dfs(s,inf);
printf("%d\n",ans);
return 0;
}
BZOJ 1324 Exca 神劍 最小割
標題效果 鑑於加權值矩陣,帶走乙個地方的權利值之後,與其相鄰的格兒童權利值變0。問多少可以取出到右值。思維 amber 題目。不難建設,圖著色。顏色從s連邊,還有一種顏色向t連邊。再把相鄰的格仔連邊。之後跑最小割,用總權值減去最大流就是答案。code include include include ...
BZOJ 1324 Exca王者之劍 最小割
題目大意 給定乙個n m的矩陣,每個格仔有寶石,人任選位置出發,取走當前位置的寶石之後四周的寶石消失,然後可以走兩步,重複上述過程 容易發現乙個格仔取了那麼四周的格仔都不能取 於是方格取數問題 黑白染色 黑色點連源 白色點連匯 流量為格仔的權值 黑白之間連邊 流量為正無窮 用總和減去最大流就是答案 ...
bzoj 1324 Exca王者之劍(最小割)
time limit 10 sec memory limit 162 mb submit 477 solved 245 submit status discuss 第一行給出數字n,m代表行列數.n,m均小於等於100 下面n行m列用於描述數字矩陣 輸出最多可以拿到多少塊寶石 2 2 1 22 1 ...