【新人向】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;
}


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

捕鱼达人鱼游动时的转向例子

作为一个标准的程序员应该有写博客的习惯,其实早就有这个念头了,只是不知道该写点什么,最近一直有朋友问我捕鱼达人鱼游动的时候鱼的方向转动该如何实现。 其实我没有写过捕鱼达人,一年前有个朋友公司做捕鱼达人...
  • i646372587
  • i646372587
  • 2015年07月12日 20:09
  • 2467

漫谈程序员系列:怎样成为技术达人

作为程序员,身边总是有牛逼的前辈、后辈或者同辈。牛逼的人总是让人羡慕。比如自己苦搞一天的 BUG ,头发快抓掉完了,人家扫上两眼,改一行代码,问题就解决了;比如自己干了十年开发,薪水还不到 10K ,...
  • foruok
  • foruok
  • 2014年12月24日 07:23
  • 55288

Cocos2d-x简单游戏<捕鱼达人>代码实现|第一部分:鱼类

#ifndef __shows__Fish__ #define __shows__Fish__ #include #include "Header.h" class Fish:publ...
  • u011286702
  • u011286702
  • 2014年03月29日 10:08
  • 4318

二分图最小点覆盖数——POJ 3041

对应POJ题目:点击打开链接 Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1591...
  • u013351484
  • u013351484
  • 2014年12月08日 20:14
  • 352

POJ 3041 —— 最小顶点覆盖

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12929   Acc...
  • zkzxmzk
  • zkzxmzk
  • 2013年10月21日 03:15
  • 570

POJ3041——Asteroids(匈牙利算法)

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20303   Accepted: 11012...
  • smile_kai
  • smile_kai
  • 2016年08月06日 19:04
  • 136

nyoj1140鸡蛋栈(怒切一水)

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

新学期一水

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

[循环节一水] hdu 4350 card

/** 模拟求出循环节来 */ #include #include #include #include using namespace std; #define N 100...
  • cscj2010
  • cscj2010
  • 2012年08月09日 19:51
  • 474

HDU 1172 每日一水

Problem Description 猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数...
  • qq_33876495
  • qq_33876495
  • 2017年07月23日 16:58
  • 65
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【新人向】POJ3041——一水达成
举报原因:
原因补充:

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