首先可以發現兩個性質:
根據這兩條性質,可以發現這是乙個二分圖最大獨立集問題。
對網格構建二分圖,即橫縱座標之和為奇數的格點與源點\(s\)連容量是寶石價值的邊,匯點\(t\)與橫縱座標之和為偶數的格點連容量是寶石價值的邊。
橫縱座標之和為奇數的格點向上下左右四個格點,連容量是\(\infty\)的邊。
最大權獨立集 = 總權值 - 最小權點覆蓋
#include #include #include #include #include using namespace std;
const int n = 10010, m = 6 * n, inf = 1e8;
int n, m, s, t;
int h[n], e[m], ne[m], f[m], idx;
int cur[n], d[n];
int dx[4] = ;
int dy[4] = ;
void add(int a, int b, int c)
bool bfs()}}
return false;
}int find(int u, int limit)
}return flow;
}int dinic()
}return res;
}int get(int x, int y)
int main()
}for(int i = 1; i <= n; i ++) }}
}printf("%d\n", tot - dinic());
return 0;
}
網路流最小割 王者之劍
傳送門 不用考慮走的方法,因為一旦合法,即不同時取相鄰的兩個,一定能達到。所以只用考慮怎麼取就行了。把棋盤黑白染色,s到黑點建權值為val的邊,白點到t建權值為val的邊,然後把相鄰的黑白點建一條為inf的邊。求最小割。不得不提一句 邊從零開始建和從一開始建乙個wa乙個a。時相應的正邊和反邊必須對應...
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 ...