【新人向】POJ3041——一水达成

原创 2015年07月09日 16:09:08

第一滴水,二分图裸题

考完期末考试感觉自己好渣……ubuntu害我连连CE,后来发现是评测器YW

#include <cstdio>
#include <memory.h>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define red(i,a,b) for(int i=(a);i>=(b);i--)
#define ll long long

const int maxn=600,maxm=10100;
const int inf=2000000000;
struct edge{
	int from,to,cap,flow;
};
vector <int> g[maxn*4];
vector <edge> e;
bool vis[maxn*4];
int d[maxn*4],cur[maxn*4];
int xx[maxm],yy[maxm];
int n,m,s,t;

void addedge(int from,int to,int cap){
	edge a,b;
	a.from=from;a.to=to;a.cap=cap;a.flow=0;
	b.from=to;b.to=from;b.cap=0;b.flow=0;
	e.push_back(a);
	e.push_back(b);
	int h=e.size();
	g[from].push_back(h-2);
	g[to].push_back(h-1);
}

bool bfs(int s,int t){
	memset(vis,0,sizeof(vis));
	queue<int> q;
	q.push(s);vis[s]=1;
	d[s]=0;
	while(!q.empty()){
		int x=q.front();q.pop();
		for(int i=0;i<g[x].size();i++){
			edge& ee=e[g[x][i]];
			if (!vis[ee.to] && ee.cap>ee.flow){
				vis[ee.to]=1;
				d[ee.to]=d[x]+1;
				q.push(ee.to);
			}
		}
	}
	return vis[t];
}

int dfs(int x,int a){
	if (x==t || a==0) return a;
	int flow=0,f;
	for(int& i=cur[x];i<g[x].size();i++){
		edge& ee=e[g[x][i]];
		if ( d[x]+1==d[ee.to] && (f=dfs(ee.to,min(ee.cap-ee.flow,a)))>0 ){
			ee.flow+=f;
			e[g[x][i]^1].flow-=f;
			flow+=f;a-=f;
			if (a==0) break;
		}
	}
	return flow;
}

int dinic(int s,int t){
	int flow=0;
	while(bfs(s,t)){
		memset(cur,0,sizeof(cur));
		flow+=dfs(s,inf);
	}
	return flow;
}

int main(){
	scanf("%d%d",&n,&m);
	rep(i,1,m) scanf("%d%d",&xx[i],&yy[i]);
	s=0;t=n*2+1;
	rep(i,1,m) addedge(xx[i],n+yy[i],1);
	rep(i,1,n) addedge(s,i,1);
	rep(i,1,n) addedge(n+i,t,1);
	int ans=dinic(s,t);
	printf("%d\n",ans);
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ3041——Asteroids(匈牙利算法)

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20303   Accepted: 11012...

POJ 3041 —— 最小顶点覆盖

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12929   Acc...

nyoj1140鸡蛋栈(怒切一水)

鸡蛋栈 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述     继队列之后,我们又来学习一种新的数据结构——栈。将队列的头部封闭后,就构成...

每天一水SGU347

今天本来应该要写校题解报告的,但是CF跪了,一题都没JUDGE出来,最后比赛取消了~郁闷啊! 后来闲的无事,就到处看看contest,随便点进去一个,看到一水题,几分钟写完,马上就WA了!~ 题目...

水一水

随便找道水线段树水一水……//codevs4919 #include #include #include #define maxn 1000000+5 using namespace std; ...

新学期一水

新学期,而且新开这里,在poj找几个水题复习复习~ poj1088 / hrbust 1179 深搜思想+记忆化搜索 对于每组数据,维护一个vis数组,记录从当前位置出发/结束所能延伸的最远距离...

[循环节一水] hdu 4350 card

/** 模拟求出循环节来 */ #include #include #include #include using namespace std; #define N 100...

HDU 1172 每日一水

Problem Description 猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数...

每天水一水 水水更健康

///设定停车场有(Size)个车位 ///有趣///同学们要是参考的话麻烦改一下 这个是要交作业的 如有雷同 如何是好? #include using namespace std; int ...

poj 3041 二分图典型题

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14588   Acc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)