http://acm.bnu.edu.cn/v3/external/gym/101485.pdf

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
struct node
{
ll x;
ll y;
int id;
}a[maxn];
int n;
ll b[maxn*];
int cnt;
struct Edge
{
int to;
int nxt;
int w;
}e[maxn*];
int tot;
int head[maxn];
map<ll,int> mp;
bool vis[maxn*];
int used[maxn*];
char op[maxn];
void init()
{
tot=;
memset(head,-,sizeof(head));
memset(vis,false,sizeof(vis));
memset(used,-,sizeof(used));
}
void add(int u,int v)
{
e[tot].to=v;
e[tot].w=;
e[tot].nxt=head[u];
head[u]=tot++;
}
int dfs(int u)
{
for(int i=head[u];i!=-;i=e[i].nxt)
{
int v=e[i].to;
if(!vis[v]&&e[i].w)
{
vis[v]=true;
if(used[v]==-||dfs(used[v]))
{
used[v]=u;
return ;
}
}
}
return ;
} void output()
{
for(int i=;i<cnt;i++)
{
if(used[mp[b[i]]]==-) continue;
int id=used[mp[b[i]]];
if(a[id].x+a[id].y==b[i]) op[id]='+';
else if(a[id].x-a[id].y==b[i]) op[id]='-';
else op[id]='*';
}
for(int i=;i<=n;i++)
{
printf("%lld %c %lld",a[i].x,op[i],a[i].y);
ll res;
if(op[i]=='+') res=a[i].x+a[i].y;
else if(op[i]=='-') res=a[i].x-a[i].y;
else if(op[i]=='*') res=a[i].x*a[i].y;
printf(" = %lld\n",res);
}
}
int main()
{
while(~scanf("%d",&n))
{
init();
mp.clear();
cnt=;
for(int i=;i<=n;i++)
{
scanf("%lld%lld",&a[i].x,&a[i].y);
a[i].id=i;
b[cnt++]=a[i].x+a[i].y;
b[cnt++]=a[i].x-a[i].y;
b[cnt++]=a[i].x*a[i].y;
}
sort(b,b+cnt);
cnt=unique(b,b+cnt)-b;
// for(int i=0;i<cnt;i++)
// {
// cout<<b[i]<<" ";
// }
// cout<<endl;
for(int i=;i<cnt;i++)
{
mp[b[i]]=i+;
}
for(int i=;i<=n;i++)
{
ll x=a[i].x+a[i].y;
ll y=a[i].x-a[i].y;
ll z=a[i].x*a[i].y;
int posx=mp[x];
int posy=mp[y];
int posz=mp[z];
// cout<<posx<<" "<<posy<<" "<<posz<<endl;
add(i,posx);
if(posy!=posx) add(i,posy);
if(posz!=posy && posz!=posx) add(i,posz);
}
int ans=;
for(int i=;i<=n;i++)
{
memset(vis,false,sizeof(vis));
ans+=dfs(i);
}
if(ans<n)
{
puts("impossible");
}
else
{
output();
}
}
return ;
}

【邻接表+匈牙利算法模板】Elementary Math的更多相关文章

  1. poj 1274 The Perfect Stall【匈牙利算法模板题】

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20874   Accepted: 942 ...

  2. 匈牙利算法模板 hdu 1150 Machine Schedule(二分匹配)

    二分图:https://blog.csdn.net/c20180630/article/details/70175814 https://blog.csdn.net/flynn_curry/artic ...

  3. hdu 2063 过山车 (最大匹配 匈牙利算法模板)

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...

  4. 匈牙利 算法&模板

    匈牙利 算法 一. 算法简介 匈牙利算法是由匈牙利数学家Edmonds于1965年提出.该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. 二分图的定义: 设G=(V,E)是一个 ...

  5. 三种邻接表存图模板:vector邻接表、数组邻接表、链式前向星

    vector邻接表: ; struct Edge{ int u,v,w; Edge(int _u=0,int _v=0,int _w=0){u=_u,v=_v,w=_w;} }; vector< ...

  6. HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...

  7. HDU 1045 - Fire Net - [DFS][二分图最大匹配][匈牙利算法模板][最大流求二分图最大匹配]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1045 Time Limit: 2000/1000 MS (Java/Others) Mem ...

  8. POJ:3041-Asteroids(匈牙利算法模板)

    传送门:http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS Memory Limit: 65536K Description Bes ...

  9. POJ 1325 && 1274:Machine Schedule 匈牙利算法模板题

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12976   Accepted: 5529 ...

随机推荐

  1. 浅谈table和DIV网页布局

    DIV+CSS是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用DI ...

  2. hadoop中修改端口号

    1.hdfs-site.xml 这里修改hdfs相关的端口. 1 <property> 2 <name>dfs.namenode.scondary.http-address&l ...

  3. Linux OpenGL 实践篇-12-procedural-texturing

    程序式纹理 简单的来说程序式纹理就是用数学公式描述物体表面的纹路 .而实现这个过程的着色器我们称之为程序纹理着色器,通常在这类着色器中我们能使用的输入信息也就是顶点坐标和纹理坐标. 程序式纹理的优点 ...

  4. SC || 关于java迭代中修改迭代集合的操作

    在通过for循环遍历整个List/Map等的时候,如果想要进行remove的操作,这时就更改了迭代集合,会出现错误 一种方法是如果只会remove一个可以remove后直接break 另一种是把集合先 ...

  5. python基础面试题整理---从零开始 每天十题(04)

    一.Q:如何用Python来进行查询和替换一个文本字符串? A:可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0]) re ...

  6. 《3+1团队》第八次团队作业:Alpha冲刺

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 3+1团队 团队博客地址 https://home.cnblogs.com/u/3-1group ...

  7. 【整理】C#文件操作大全

    文件与文件夹操作主要用到以下几个类: 1.File类: 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象. msdn:http://msdn.microsof ...

  8. ios之UITabelViewCell的自定义(xib实现)

    通过继承UITableViewCell来自定义cell 1.创建一个空的项目.命名: 2.创建一个UITableViewController 并且同时创建xib: 3.设置AppDelegate.m中 ...

  9. PAT 乙级 1013

    题目 题目地址:PAT 乙级 1013 思路 审题没把范围看清楚,没一次AC 题中m和n都表示第几个素数,范围是10000,所以查询的数组中需要的素数量至少10000,所以需要计算大概2~120000 ...

  10. UVa-10474-大理石在哪

    lower_bound()的作用是查找"大于或等于x的第一个位置",但是返回的是地址,所以减去数组的首地址就是偏移量了,也就是整型数字. #include <iostream ...