亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 2357.cpp

?? 哈爾濱工業大學ACM 競賽網上在線試題集錦的源代碼
?? CPP
字號:
/* This Code is Submitted by wywcgs for Problem 2357 on 2006-10-13 at 12:46:05 */
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
 
typedef long long int64;
typedef pair<int, int64> pii;
const int N = 512;
const int INF = 1 << 28;
const int64 PINF = 1LL << 60;
 
class Heap {
private:
	int size, p[N], h[N];
	int64 d[N];
	void siftUp(int);
	void siftDown(int);
public:
	void clear() { size = 0; memset(h, -1, sizeof(h)); }
	bool isEmpty() const { return (size == 0); }
	void push(int, int64);
	pii pop();
};
void Heap::siftUp(int n) {
	int pn = p[n], i = n;
	int64 dn = d[n];
	while(i > 0 && dn < d[(i-1)/2]) {
		d[i] = d[(i-1)/2]; p[i] = p[(i-1)/2]; h[p[i]] = i;
		i = (i - 1) / 2;
	}
	d[i] = dn; p[i] = pn; h[pn] = i;
}
void Heap::siftDown(int n) {
	int pn = p[n], i = n;
	int64 dn = d[n];
	while(2*i+2 <= size) {
		int m = 2*i+1;
		if(m+1 < size && d[m] > d[m+1]) m++;
		if(dn <= d[m]) break;
		d[i] = d[m]; p[i] = p[m]; h[p[i]] = i;
		i = m;
	}
	d[i] = dn; p[i] = pn; h[pn] = i;
}
void Heap::push(int e, int64 ev) {
	if(h[e] == -1) {
		h[e] = size++; d[h[e]] = ev; p[h[e]] = e;
		siftUp(h[e]);
	} else if(h[e] != -2 && d[h[e]] > ev) {
		d[h[e]] = ev;
		siftUp(h[e]);
	}
}
pii Heap::pop() {
	pii b = pii(p[0], d[0]);
	h[p[0]] = -2;
	if(--size != 0) {
		d[0] = d[size]; p[0] = p[size]; h[p[0]] = 0;
		siftDown(0);
	}
	return b;
}
 
Heap Q;
 
class Edge {
public:
	int u, v, cuv, cvu, flow;
	Edge() {}
	Edge(int cu, int cv, int ccu, int ccv) : u(cu), v(cv), cuv(ccu), cvu(ccv), flow(0) {}
	int other(int p) const { return p == u ? v : u; }
	int cap(int p) const { return p == u ? cuv-flow : cvu+flow; }
	void addFlow(int p, int f) { flow += (p == u ? f : -f); }
};
 
class NodeList {
private:
	int level, next[N], index[2*N], v;
public:
	void clear(int cv) { v = cv; level = -1; memset(index, -1, sizeof(index)); }
	void insert(int n, int h) { next[n] = index[h]; index[h] = n; level >?= h; }
	int remove();
	bool empty() const { return level < 0; }
};
int NodeList::remove() {
	int r = index[level]; index[level] = next[index[level]];
	while(level >= 0 && index[level] == -1) level--;
	return r;
}
 
class Network {
private:
	vector<Edge> eg;
	vector<Edge*> net[N];
	int v, s, t;
	int h[N], hn[2*N], cur[N], e[N];
	int cwn[N], cwlmt[N], fulf;
	NodeList list;
	vector<pii> g[N];
	void initNet();
	void initFlow();
	void initHeight();
	void gapHeuristic(int);
	void push(int);
	void relabel(int);
	void discharge(int);
	void dijkstra(int);
	void initNetwork(int64);
	int maxFlow(int, int);
public:
	int n;
	int64 d[N][N];
	bool build();
	bool fullFlow(int64 midv) { initNetwork(midv); return fulf == maxFlow(0, 1); }
};
void Network::gapHeuristic(int k) {
	if(hn[k] != 0 || k >= v+1) return;
	for(int i = 0; i < v; i++)
		if(h[i] > k && h[i] <= v && i != s)
			{ hn[h[i]]--; hn[v+1]++; h[i] = v+1; }
}
void Network::initNet() {
	for(int i = 0; i < v; i++) net[i].clear();
	for(int i = eg.size()-1; i >= 0; i--) {
		net[eg[i].u].push_back(&eg[i]);
		net[eg[i].v].push_back(&eg[i]);
	}
}
void Network::initHeight() {
	memset(h, 0, sizeof(h)); memset(hn, 0, sizeof(hn));
	memset(e, 0, sizeof(e)); e[s] = INF;
	for(int i = 0; i < v; i++) h[i] = v;
	queue<int> Q; Q.push(t); h[t] = 0;
	while(!Q.empty()) {
		int p = Q.front(); Q.pop();
		for(int i = net[p].size()-1; i >= 0; i--) {
			int u = net[p][i]->other(p), ec = net[p][i]->cap(u);
			if(ec != 0 && h[u] == v && u != s) { h[u] = h[p]+1; Q.push(u); }
		}
	}
	for(int i = 0; i < v; i++) hn[h[i]]++;
}
void Network::initFlow() {
	initNet(); initHeight();
	for(int i = 0; i < v; i++) cur[i] = net[i].size()-1;
	list.clear(v);
	for(; cur[s] >= 0; cur[s]--) push(s);
}
void Network::push(int u) { 
	Edge* te = net[u][cur[u]];
	int ex = min(te->cap(u), e[u]), p = te->other(u);
	if(e[p] == 0 && p != t) list.insert(p, h[p]);
	te->addFlow(u, ex); e[u] -= ex; e[p] += ex; 
} 
void Network::relabel(int u) { 
	int mh = 2*v, oh = h[u]; 
	for(int i = net[u].size()-1; i >= 0; i--) { 
		int p = net[u][i]->other(u); 
		if(net[u][i]->cap(u) != 0) mh <?= h[p]+1; 
	} 
	hn[h[u]]--; hn[mh]++; h[u] = mh; cur[u] = net[u].size()-1; 
	gapHeuristic(oh);
}
void Network::discharge(int u) { 
	while(e[u] > 0)
		if(cur[u] < 0) relabel(u);
		else if(net[u][cur[u]]->cap(u) > 0 && h[u] == h[net[u][cur[u]]->other(u)]+1) push(u);
		else cur[u]--;
}
int Network::maxFlow(int ss, int tt) {
	s = ss; t = tt; initFlow();
	while(!list.empty()) {
		int u = list.remove();
		discharge(u);
	}
	return e[t];
}
void Network::dijkstra(int src) {
	Q.clear(); Q.push(src, 0);
	for(int i = 0; i < n; i++) d[src][i] = PINF;
	while(!Q.isEmpty()) {
		pii s = Q.pop();
		int u = s.first; int64 v = s.second;
		d[src][u] = v;
		for(int i = g[u].size()-1; i >= 0; i--) {
			int no = g[u][i].first, nv = g[u][i].second;
			Q.push(no, v+nv);
		}
	}
}
bool Network::build() {
	int m;
	if(scanf("%d %d", &n, &m) != 2) return false;
	v = 2*n+2; fulf = 0;
	for(int i = 0; i < n; i++) scanf("%d %d", cwn+i, cwlmt+i);
	for(int i = 0; i < n; i++)
		if(cwn[i] > cwlmt[i]) fulf += cwn[i]-cwlmt[i];
	for(int i = 0; i < n; i++) g[i].clear();
	for(int i = 0; i < m; i++) {
		int a, b, pv; scanf("%d %d %d", &a, &b, &pv);
		g[a-1].push_back(pii(b-1, pv)); g[b-1].push_back(pii(a-1, pv)); 
 	}
	for(int i = 0; i < n; i++) dijkstra(i);
	return true;
}
void Network::initNetwork(int64 midv) {
	eg.clear();
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
			if(i != j && d[i][j] <= midv) eg.push_back(Edge(2*i+3, 2*j+2, INF, 0));
	for(int i = 0; i < n; i++) eg.push_back(Edge(2*i+2, 2*i+3, cwn[i], 0));
	for(int i = 0; i < n; i++)
		if(cwn[i] > cwlmt[i]) eg.push_back(Edge(0, 2*i+2, cwn[i]-cwlmt[i], 0));
		else if(cwn[i] < cwlmt[i]) eg.push_back(Edge(2*i+2, 1, cwlmt[i]-cwn[i], 0));
}
 
Network net;
int64 s[N*N],	n;
 
int disperse(int64*, int64*);
 
int main()
{
	while(net.build()) {
		for(int i = n = 0; i < net.n; i++)
			for(int j = i; j < net.n; j++)
				s[n++] = net.d[i][j];
		n = disperse(s, s+n);
		int l = 0, h = n;
		while(h != l) {
			int mid = (h+l)/2;
			if(net.fullFlow(s[mid])) h = mid;
			else l = mid+1;
		}
		if(h == n || s[h] == PINF) printf("-1\n");
		else printf("%lld\n", s[l]);
	}
	
	return 0;
}
 
int disperse(int64* b, int64* e)
{
	int n = e-b, dn = 1;
	sort(b, e);
	for(int i = 1; i < n; i++)
		if(b[i] != b[i-1]) b[dn++] = b[i];
	return dn;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区久久久| 99九九99九九九视频精品| 一区二区三区成人| 日韩一区欧美小说| 国产精品妹子av| 日本一区二区久久| 国产精品视频第一区| 国产精品二三区| 亚洲女女做受ⅹxx高潮| 一区二区三区小说| 亚洲成av人在线观看| 日韩精品免费视频人成| 男人的天堂亚洲一区| 久国产精品韩国三级视频| 韩日精品视频一区| av在线一区二区| 在线观看日韩av先锋影音电影院| 国产一区二三区| 韩国在线一区二区| yourporn久久国产精品| 欧美性视频一区二区三区| 欧美日韩一区在线| 欧美精品一区二区三区一线天视频| 欧美r级电影在线观看| 国产精品色眯眯| 亚洲成a人片综合在线| 久久99国产精品久久| 国产成人aaaa| 欧美日韩一区二区三区高清| 日韩欧美国产一二三区| 国产精品全国免费观看高清| 亚洲一区免费在线观看| 精品综合免费视频观看| 91视频精品在这里| 日韩欧美一级精品久久| 亚洲色大成网站www久久九九| 亚洲h精品动漫在线观看| 国产成人免费在线观看| 欧美视频一二三区| 欧美高清在线一区| 美日韩一区二区| 在线一区二区三区做爰视频网站| 日韩一区二区三区四区| 亚洲欧洲性图库| 久久99在线观看| 在线免费观看日本一区| 久久久久9999亚洲精品| 亚洲丰满少妇videoshd| 粉嫩aⅴ一区二区三区四区五区| 欧美日韩国产综合一区二区三区| 中文字幕成人在线观看| 蜜桃av噜噜一区| 久久久影视传媒| 天堂va蜜桃一区二区三区| av中文字幕一区| 久久久精品人体av艺术| 日本亚洲免费观看| 欧美性xxxxxx少妇| 136国产福利精品导航| 久久 天天综合| 欧美一区二区三区免费大片| 一区二区三区精品久久久| 99久久综合国产精品| 久久精品一区二区三区av| 久久精品噜噜噜成人88aⅴ| 精品视频免费看| 一区二区三区免费在线观看| aa级大片欧美| 亚洲色图欧美激情| 不卡视频在线观看| 国产精品久久久久影院老司| 风间由美性色一区二区三区| 久久亚区不卡日本| 狠狠久久亚洲欧美| 久久在线免费观看| 国产一区二区网址| 国产女人aaa级久久久级| 国产成人亚洲综合a∨猫咪| 国产日韩欧美一区二区三区乱码 | 一区二区成人在线观看| 色综合天天性综合| 亚洲少妇最新在线视频| 日本福利一区二区| 亚洲午夜精品17c| 欧美日韩国产中文| 免费成人结看片| 26uuu另类欧美| 国产成人精品免费一区二区| 国产精品久久久久久久久快鸭| 成人h动漫精品一区二区| 亚洲美女淫视频| 777a∨成人精品桃花网| 久久av中文字幕片| 18成人在线观看| 欧美日韩一区久久| 久久国产尿小便嘘嘘尿| 中国av一区二区三区| 91九色最新地址| 久久av资源网| 亚洲男同1069视频| 欧美成人精品二区三区99精品| 国产精品99久久久久久久vr| 亚洲色图19p| 日韩欧美亚洲一区二区| 成人18视频日本| 午夜国产不卡在线观看视频| 久久伊人蜜桃av一区二区| 91网站最新地址| 极品尤物av久久免费看| 亚洲日本va午夜在线电影| 欧美一卡在线观看| 国产精品88888| 亚洲 欧美综合在线网络| 久久噜噜亚洲综合| 在线观看91视频| 国产成人午夜精品影院观看视频| 亚洲一区二区三区四区五区黄| 欧美成人官网二区| 日本韩国欧美三级| 国产精品小仙女| 蜜臀久久99精品久久久画质超高清| 欧美久久婷婷综合色| 成人午夜视频免费看| 日本vs亚洲vs韩国一区三区二区 | 欧美调教femdomvk| 国产精品白丝jk白祙喷水网站| 性感美女极品91精品| 国产精品污www在线观看| 欧美一级理论片| 欧洲一区二区三区在线| 99久久国产综合精品麻豆| 国模套图日韩精品一区二区| 日日骚欧美日韩| 亚洲精品国产精华液| 中文字幕免费一区| 国产视频一区在线观看| 欧美本精品男人aⅴ天堂| 欧美日本视频在线| 欧美色精品在线视频| 北条麻妃国产九九精品视频| 国产精品中文有码| 激情综合网最新| 麻豆91精品91久久久的内涵| 日韩在线卡一卡二| 日韩电影网1区2区| 日韩精品国产精品| 午夜成人免费视频| 三级亚洲高清视频| 肉肉av福利一精品导航| 水野朝阳av一区二区三区| 亚洲国产一区二区视频| 亚洲国产中文字幕在线视频综合| 一区二区三区精品久久久| 一级日本不卡的影视| 一二三四社区欧美黄| 亚洲激情校园春色| 亚洲一区二区三区自拍| 亚洲成av人片在线观看无码| 视频一区视频二区中文| 久久精品国产一区二区| 激情久久久久久久久久久久久久久久| 美女在线观看视频一区二区| 激情亚洲综合在线| 国产精品一级片在线观看| 成人av资源网站| 一本大道久久a久久精二百| 欧美精品tushy高清| 日韩丝袜情趣美女图片| 久久午夜电影网| 国产精品久久久久久久午夜片| 亚洲欧美在线另类| 亚洲高清三级视频| 极品尤物av久久免费看| 不卡的电影网站| 欧美亚洲日本国产| 日韩视频不卡中文| 国产精品美女一区二区在线观看| 亚洲猫色日本管| 久久精品国产77777蜜臀| 国产美女久久久久| 色就色 综合激情| 日韩午夜三级在线| 亚洲欧洲日韩在线| 日韩黄色小视频| 成人国产视频在线观看| 欧美高清视频www夜色资源网| 久久久噜噜噜久噜久久综合| 一区二区三区中文免费| 捆绑调教美女网站视频一区| www.成人网.com| 91精品国产91综合久久蜜臀| 国产精品嫩草99a| 日韩av高清在线观看| av中文字幕不卡| 欧美不卡一二三| 一区二区三区在线高清| 国产精品99久久久| 欧美一区二视频| 亚洲女与黑人做爰| 国产高清不卡一区|