UVALive 7427Elementary Math
来源:互联网 发布:mysql查询重复的记录 编辑:程序博客网 时间:2024/06/04 23:25
题目大意:给定一些数对,用+-*三个运算符号去操作数对,使得每个数对操作之后的结果都不相同。如果存在满足情况的解,则按照原顺序输出,否则输出impossible
一个设计的非常巧妙地二分图!!
数对是一边,匹配的是所有的运算结果,如果存在这样的结果,就把点对和结果连边,得出最大匹配。
特别需要注意的是,结果存储的时候需要三倍空间。
小错误真的可以让人WA到怀疑人生
#include<bits/stdc++.h>using namespace std;#define N 2502struct xx{ long long a,b; long long c;} T[N];long long useif[3*N]; //记录y中节点是否使用 0表示没有访问过,1为访问过long long link[N*3]; //记录当前与y节点相连的x的节点long long mat[N][N*3]; //记录连接x和y的边,如果i和j之间有边则为1,否则为0long long gn,gm; //二分图中x和y中点的数目long long j[N*3];long long can(long long t ){ long long i; for(i=1; i<=gm; i++) { if(useif[i]==0 && mat[t][i]) { useif[i]=1; if(link[i]==-1 || can(link[i])) { link[i]=t; return 1; } } } return 0;}long long MaxMatch(){ int i,num; num=0; memset(link,0xff,sizeof(link)); for(i=1; i<=gn; i++) { memset(useif,0,sizeof(useif)); if(can(i)) num++; } return num;}int main(){ int n; while(cin>>n) { gn=n; long long top=1; map<long long,long long >tmp; memset(mat,0,sizeof mat); memset(link,0,sizeof link); memset(useif,0,sizeof useif); for(int i=1; i<=n; i++) { cin>>T[i].a>>T[i].b; long long ad,su,mu; ad=T[i].a+T[i].b; su=T[i].a-T[i].b; mu=T[i].a*T[i].b; if(tmp[ad]==0) { tmp[ad]=top; mat[i][top]=1; j[top]=ad; top++; } else { mat[i][ tmp[ad] ]=1; } if(tmp[su]==0) { tmp[su]=top; mat[i][top]=1; j[top]=su; top++; } else { mat[i][ tmp[su] ]=1; } if(tmp[mu]==0) { tmp[mu]=top; mat[i][top]=1; j[top]=mu; top++; } else { mat[i][ tmp[mu] ]=1; } } gm=top-1; long long num=MaxMatch(); if(num!=n) { cout<<"impossible"<<endl; continue; } for(int i=1; i<=gm; i++) { if(link[i]>0) { T[link[i]].c=j[i]; } } for(int i=1; i<=n; i++) { long long xxx=T[i].a; long long yyy=T[i].b; cout<<xxx; if(xxx+yyy==T[i].c)cout<<" + "; else if(xxx-yyy==T[i].c)cout<<" - "; else if(xxx*yyy==T[i].c)cout<<" * "; cout<<yyy<<" = "; cout<<T[i].c<<endl; } }}
0 0
- UVALive 7427Elementary Math
- Elementary Math、
- NWERC2015 Elementary Math
- NWERC2015-Elementary Math
- Elementary Math Gym
- CF Elementary Math【网络流】
- 【NWERC2015】【BZOJ4429】Elementary Math小学数学
- bzoj4429: [Nwerc2015] Elementary Math小学数学
- 【bzoj4429】[Nwerc2015] Elementary Math小学数学
- BZOJ 4429: [Nwerc2015] Elementary Math小学数学
- 【BZOJ4429】[Nwerc2015] Elementary Math小学数学【二分图匹配】
- BZOJ4429 Elementary Math小学数学 (二分图匹配)
- bzoj 4429: [Nwerc2015] Elementary Math小学数学 网络流
- CodeFroces NWERC 2015 E.Elementary Math(二分图)
- BZOJ 4429 [Nwerc2015] Elementary Math小学数学 二分图匹配
- UVALive 4225 Prime Bases(math)
- UVALive - 7271 A Math Problem (hihocoder 1259)
- BZOJ4429(Nwerc2015)[Elementary Math小学数学]--离散+二分图最大匹配
- 自定义Dialog的测量优化
- CentOS7安装后必做的几件事
- linux (centos6.6)进入维护模式
- Kafka+Spark Streaming+Redis实时计算整合实践
- linux私钥登录
- UVALive 7427Elementary Math
- (17)while do while 语句 (18)for循环语句 (19)break contiue
- jenkins安装(已下载部分插件版
- 超详细 Servlet工作原理解析
- Centos 安装Sublime text 3
- 猜单词
- 设置双卡不同的来电默认铃声
- 图结构练习——判断给定图是否存在合法拓扑序列
- java中的那些坑(一)