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;
}


版权声明:吸猫大法、

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

DescriptionEllen is teaching elementary math to her students and the time for the final exam has com...
  • CreationAugust
  • CreationAugust
  • 2016年03月24日 11:07
  • 1026

UVALive 7427 Elementary Math

题目大意:给定一些数对,用+-*三个运算符号去操作数对,使得每个数对操作之后的结果都不相同。如果存在满足情况的解,则按照原顺序输出,否则输出impossible 一个设计的非常巧妙地二分图!! 数...
  • tinyguyyy
  • tinyguyyy
  • 2016年08月05日 16:41
  • 438

Gym - 101485E Elementary Math

题目链接:https://odzkskevi.qnssl.com/19afdbfcc9ee8720dd81032e85ed2a5a?v=1506446502题解:二分匹配或网络流。代码:Dinic模板...
  • silver_bone
  • silver_bone
  • 2017年10月03日 09:39
  • 96

elementary OS 0.4 也来了

以界面优美而著称的 elementary OS 0.4 “Loki” 在经过了两个 Beta 版本之后发布了正式版,原本我们以为还会放出 RC 版的。“Loki” 基于 Ubuntu 16.04 LT...
  • u014743697
  • u014743697
  • 2016年10月05日 09:07
  • 2605

NWERC2015 Elementary Math

#include #include #include #define maxl 10010 #define inf 2000000001 using namespace std; int n,m,...
  • liufengwei1
  • liufengwei1
  • 2017年10月01日 20:14
  • 132

CF Elementary Math【网络流】

题意:有n对数字,中间可以填+ - *,问有没有可能n个算式的结果都不一样。 思路:最大流,每对数字的3种结果都算出来,连过去,容量为1。起点连n对数,汇点连它们的结果,容量都为1。 最大...
  • wjw1340
  • wjw1340
  • 2017年09月14日 21:54
  • 58

elementary os:源码安装程序+创建快捷方式

1源码安装程序 1)、下载tar.gz后缀的NodeJS最新版源代码包并解压到某个位置。 2、进入解压到的目录,使用以下命令编译和安装。         ~> ./configure   ...
  • wowtous
  • wowtous
  • 2014年07月19日 10:11
  • 1343

Linux(ElementaryOS) 实用命令

快速打开终端: ‘win键 + t’ 关闭终端: ‘ctrl + d’ 打开任意格式文件: ‘odg-open filename’ 如: 打开‘百度’:odg-open http://www....
  • sser_cm
  • sser_cm
  • 2017年01月12日 00:32
  • 584

适用于Elementary OS的国内源

#163 deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb-src http://m...
  • tinyeyeser
  • tinyeyeser
  • 2014年03月18日 16:23
  • 9076

[solved]:gpt+uefi安装elementary OS的时候,无法启动,直接进入grub>[镜像]

本博客是我的Blogger博客镜像,以方便墙内读者访问。想看更新内容,去我的Blogger主站https://the0demiurge.blogspot.jp/看看吧 我此前使用Debian...
  • u012857206
  • u012857206
  • 2017年06月05日 18:08
  • 13829
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Elementary Math、
举报原因:
原因补充:

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