CodeFroces NWERC 2015 E.Elementary Math(二分图)
来源:互联网 发布:mac os清理软件 编辑:程序博客网 时间:2024/05/29 15:14
题意:给出n对数字,可以在n对数字中间用+,-,*三种运算,要保证最后得到的答案不能有相同的。
解法:考虑到n只有2500,数据量比较小,最多只会有7500种结果,所以可以构造二分图。左边是n个点代表n对数字,右边?个点,代表结果。左边n个数字都向着右边他所能得到的答案连一条边。
如果有两对数字运算结果相同,那么他们同时连到这个点上面。
看看最后最大匹配是否等于n就知道可不可行了。
复杂度是O(VE),E = 3 * V,所以就是O(3 * V²)。
代码如下:(62ms)
#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<utility>#include<stack>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<set>#include<map>using namespace std;const int maxn = 2505;int uN, vN; //u,v数目int G[maxn][maxn * 3];//编号是0~n-1的 int linker[maxn * 3];int linker2[maxn];bool used[maxn * 3];bool dfs(int u){ int v; for(v = 0; v < vN; v++) if(G[u][v] && !used[v]) { used[v] = true; if(linker[v] == -1 || dfs(linker[v])) { linker[v] = u; linker2[u] = v; return true; } } return false; }int hungary(){ int res = 0; int u; memset(linker, -1, sizeof(linker)); memset(linker2, -1, sizeof(linker2)); for(u = 0; u < uN; u++) { memset(used, 0, sizeof(used)); if(dfs(u))res++; } return res; }map <long long, int> Map;long long x[maxn], y[maxn];long long cnt[maxn * 3];int main() {#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);#endifint n;scanf("%d", &n);for(int i = 0; i < n; i++) {long long tmp;scanf("%lld%lld", &x[i], &y[i]);tmp = x[i] + y[i];if(Map.find(tmp) != Map.end()) {G[i][Map[tmp]] = 1;} else {G[i][vN] = 1;Map[tmp] = vN;cnt[vN] = tmp;vN++;}tmp = x[i] - y[i];if(Map.find(tmp) != Map.end()) {G[i][Map[tmp]] = 1;} else {G[i][vN] = 1;Map[tmp] = vN;cnt[vN] = tmp;vN++;}tmp = x[i] * y[i];if(Map.find(tmp) != Map.end()) {G[i][Map[tmp]] = 1;} else {G[i][vN] = 1;Map[tmp] = vN;cnt[vN] = tmp;vN++;}}uN = n;int ans = hungary();if(ans != n)printf("impossible\n");else {for(int i = 0; i < n; i++) {long long tmp = cnt[linker2[i]];if(x[i] + y[i] == tmp) {printf("%lld + %lld = %lld\n", x[i], y[i], tmp);} else if(x[i] - y[i] == tmp) {printf("%lld - %lld = %lld\n", x[i], y[i], tmp);} else {printf("%lld * %lld = %lld\n", x[i], y[i], tmp);}}}return 0;}
阅读全文
0 0
- CodeFroces NWERC 2015 E.Elementary Math(二分图)
- 2015-2016 Northwestern European Regional Contest (NWERC 2015) E. Elementary Math
- 【BZOJ4429】[Nwerc2015] Elementary Math小学数学【二分图匹配】
- BZOJ4429 Elementary Math小学数学 (二分图匹配)
- BZOJ 4429 [Nwerc2015] Elementary Math小学数学 二分图匹配
- Elementary Math、
- BZOJ4429(Nwerc2015)[Elementary Math小学数学]--离散+二分图最大匹配
- 2015-2016 Northwestern European Regional Contest (NWERC 2015) E
- UVALive 7427Elementary Math
- NWERC2015 Elementary Math
- NWERC2015-Elementary Math
- Elementary Math Gym
- C-Cleaning Pipes(判断两线段相交+二分图判定) 2015-2016 Northwestern European Regional Contest (NWERC 2015)
- CF Elementary Math【网络流】
- NWERC 2015 模拟赛
- NWERC 2012 Joint Venture (二分+枚举)
- 【NWERC2015】【BZOJ4429】Elementary Math小学数学
- bzoj4429: [Nwerc2015] Elementary Math小学数学
- html+css学习笔记
- 解决CentOS 中部署JasperReport时出错的问题。错误:net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体
- nginx 的负载均衡
- VMware Workstation 11.0.0 注册码
- UVa 11464
- CodeFroces NWERC 2015 E.Elementary Math(二分图)
- 洛谷P1273 有线电视网
- UVA 11374 Airport Express (最短路)
- 第七周项目二 建立链队算法库
- 坑人的OJ
- 寂寥的雨花,打在你的遮阳伞上,回忆,是那样刻骨铭心,若如初见。你,与我相爱了半生,却让我下半生寂寞地守候你,你的离开,是为了自己翱翔天空的梦想,是为了在天空,也能种下我们相思相爱的杜鹃雨。 而我,只
- Codeforces 861 D Polycarp's phone book(字典树模板)
- 数组奇数和
- 学生管理系统