Elementary Math、

原创 2016年08月30日 22:20:37

二分图匹配+离散化

#include<cmath>
#include<cstring>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<map>
#include<iostream>
using namespace std;
typedef __int64 ll;
const int qq = 2505;
vector <int> adj[qq];
map<ll,int>notoint;
int N,nodes,pred[qq*3];
ll a[qq],b[qq],idtores[qq*3],res[qq];
bool mark[qq*3];
bool match(int i){	//访问左边的顶点、 
	for(int j=0; j<adj[i].size(); ++j){
		int x=adj[i][j];	//与当前有联系的右边的顶点、 
		if(mark[x])	continue;		//没判断这个又调试了一会、 
		mark[x]=true;
		if(pred[x]==-1 || match(pred[x])){
			pred[x]=i;			//右边的x顶点连边 i 、 
			return true;
		}
	}
	return false;
}
int maxmatch(){
	memset(pred, -1, sizeof(pred));
	int res=0;
	for(int i=0; i<N; ++i){
		memset(mark, false, sizeof(mark));
		if(match(i))	res++;
	}
	return res;
}
int get(ll x){		//得到的结果为键值、 
	if(!notoint.count(x)){
		notoint[x] = nodes++;	//每一个值对应一个数字进行离散化、用map记录 
		idtores[notoint[x]] = x;	//然后用这个数组还原数值、 
	}
	return notoint[x];	//返回每一个值离散化后的数字、 
}
int main(){
	cin >> N;
	nodes=0;
	for(int i=0; i<N; ++i){
		cin >> a[i] >> b[i];
		adj[i].push_back(get(a[i]+b[i]));
		adj[i].push_back(get(a[i]-b[i]));
		adj[i].push_back(get(a[i]*b[i]));
	}
//	for(int i=0; i<N; ++i)
//		for(int j=0; j<adj[i].size(); ++j)
//			printf("%d\n",adj[i][j]);
	if(maxmatch() < N)	cout << "impossible" << endl;
	else{
		for(int i=0; i<nodes; ++i)	
			if(pred[i]>=0)
				res[pred[i]]=idtores[i];
		for(int i=0; i<N; ++i){
			char ch='+';
			if(a[i]-b[i]==res[i])	ch='-';
			else if(a[i]*b[i]==res[i])	ch='*';
			cout << a[i] << " " << ch << " " << b[i] << " = " << res[i] << endl;
		}
	}
	return 0;
}


版权声明:吸猫大法、

相关文章推荐

BZOJ4429 Elementary Math小学数学 (二分图匹配)

题目大意给出n个数对,支持加减乘三种操作,输出一种方案使每一个式子的结果各不相同。如果没有方案的话输出impossible。题解因为每个方案中,每一个式子都能且只能对应一个值,所以说式子和值的关系是一...

【BZOJ4429】[Nwerc2015] Elementary Math小学数学【二分图匹配】

【题目链接】 题解: 把算式和对应的数连边,跑二分图匹配。 要先离散化一下数字,或者用map。 复杂度: 时间复杂度:O(二分图匹配),hungary是O(nm)。 空间复杂度...

【NWERC2015】【BZOJ4429】Elementary Math小学数学

DescriptionEllen is teaching elementary math to her students and the time for the final exam has com...

爬坑总结———elementary OS 0.4.1 Loki 下引导修复和安装搜狗输入法

 爬坑总结———elementary OS 0.4.1 Loki 下引导修复和安装搜狗输入法                                                ...

elementary os Freya安装后的一些配置

linux chrome安装flash player的方法: sudo apt-get install pepperflashplugin-nonfree sudo update-pepperfl...

Algorithms - Week 2-1 Elementary Sorts

Selection Sort, Insertion Sort, Shell Sort, Shuffling, Convex Hull.

Algorithms - Week 4-1 Elementary Symbol Tables

Symbol Tables. Binary Search Trees. Deletion in BSTs.

关于安装elementary中遇到的问题记录

最近,这两天,我在重装自己的linux系统,由于原来的用的LinuxMint系统被我折腾了出了些小问题,不过说真的,Mint给我的感觉的真的很不错,比ubuntu好用太多,而且我对自己配置的工作环境也...

8-Elementary UDP Sockets

Please indicate the source: http://blog.csdn.net/gaoxiangnumber1Welcome to my github: https://github...

Volume 1. Elementary Problem Solving :: Sorting/SearchingUva 340,10420,10474,152,299,120,156,400,755

刘汝佳 算法入门 第一版 Uva题目集合(四)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Elementary Math、
举报原因:
原因补充:

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