河南第十届ACM省赛-E-八纵八横
ACM模版
描述
题解
我们不解题,我们只是代码的搬运工……
所以不要问我这个题为啥这样写,这个题是前一段时间河南省选赛的最难的题,这次出在河南第十届ACM省赛也是为了防 AK,谁成想,并没有起到效果,一共十一支队伍 AC,不过这十一支队伍都是那两个学校的,连铜牌队伍也 A 出来了,所以应该是他们都打印了这个题的代码,直接拓上去的。实际上这个并不是什么模版题……是彻头彻尾的原题原代码罢了,mark 一下算了,毕竟这个题实在是不好弄,对于我这种水平的人来说,实在是没有太大意义去深究他。
代码
#include <iostream>
#include <cstdio>
#include <set>#define FILE "eights"using namespace std;const int MAXN = 1024;typedef bitset<MAXN> bst;struct node
{int x, next;bst v;
} e[MAXN << 1];char ch[MAXN];
int n, m, P, cnt, len, Link[MAXN], f[MAXN], wh[MAXN], E[MAXN][2];
bst mat[MAXN], M[MAXN], dis[MAXN], V[MAXN];inline int read()
{int x = 0, f = 1;char ch = getchar();while (!isdigit(ch)){if (ch == '-'){f = -1;}ch = getchar();}while (isdigit(ch)){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}bst Read()
{bst temp;temp.reset();scanf("%s", ch + 1);int len = (int)strlen(ch + 1);for (int i = 1; i <= len; i++){temp[len - i] = ch[i] - '0';}return temp;
}void insert(int x, int y, bst v)
{e[++len].next = Link[x];Link[x] = len;e[len].x = y;e[len].v = v;e[++len].next = Link[y];Link[y] = len;e[len].x = x;e[len].v = v;
}int find(int x)
{return f[x] == x ? x : f[x] = find(f[x]);
}void dfs(int x, int pre)
{for (int i = Link[x]; i; i = e[i].next){if (e[i].x != pre){dis[e[i].x] = dis[x] ^ e[i].v;dfs(e[i].x, x);}}
}void updata(int x, bst y)
{int pos = 0;for (int i = 1; i <= 1000; ++i){if (M[i][x] && mat[i].none()){pos = i;break;}}if (!pos){for (int i = 0; i <= 1000; ++i){if (M[wh[i]][x] && wh[i] != 0){pos = wh[i];wh[i] = 0;break;}}}for (int i = 1; i <= 1000; ++i){if (pos != i && M[i][x]){mat[i] = mat[i] ^ mat[pos], M[i] = M[i] ^ M[pos];}}mat[pos] ^= y;for (int i = 1000; i >= 0; --i){if (mat[pos][i]){if (!wh[i]){wh[i] = pos;break;}else{mat[pos] = mat[pos] ^ mat[wh[i]];M[pos] = M[pos] ^ M[wh[i]];}}}
}void output()
{bst ans;ans.reset();char ts[MAXN], *tmp;for (int i = 1000; i >= 0; --i){if (ans[i] == 0 && wh[i]){ans = ans ^ mat[wh[i]];}}if (ans.none()){puts("0");}else{tmp = ts;for (int i = 1000; i >= 0; --i){if (ans[i]){for (int j = i; j >= 0; --j){*(tmp++) = ans[j] + '0';}break;}}*(tmp++) = '\0';puts(ts);}
}int main()
{
// freopen(FILE".in", "r", stdin);
// freopen(FILE".out", "w", stdout);n = read();m = read();P = read();for (int i = 1; i <= n; ++i){f[i] = i;}for (int i = 1; i <= 1000; ++i){M[i][i] = 1;}for (int i = 1; i <= m; ++i){int x = read(), y = read();bst value = Read();if (find(x) == find(y)){E[++cnt][0] = x, E[cnt][1] = y, V[cnt] = value;}else{f[find(x)] = find(y), insert(x, y, value);}}dfs(1, 0);int CASE = cnt;for (int i = 1; i <= cnt; ++i){updata(i, dis[E[i][0]] ^ dis[E[i][1]] ^ V[i]);}output();for (int i = 1; i <= P; ++i){char opt[10];scanf("%s", opt);if (opt[1] == 'd'){int x = read(), y = read();bst value = Read();E[++cnt][0] = x;E[cnt][1] = y;V[cnt] = value;updata(cnt, dis[E[cnt][0]] ^ dis[E[cnt][1]] ^ V[cnt]);}else if (opt[1] == 'h'){int x = read();bst value = Read();updata(x + CASE, V[x + CASE] ^ value);V[x + CASE] = value;}else{int x = read();updata(x + CASE, dis[E[x + CASE][0]] ^ dis[E[x + CASE][1]] ^ V[x + CASE]);V[x + CASE] = dis[E[x + CASE][0]] ^ dis[E[x + CASE][1]];}output();}return 0;
}
河南第十届ACM省赛-E-八纵八横相关推荐
- 第十届ACM山东省赛总结
省赛结束了,排名打铁,只出了四题.前三个小时只出了一道题.M题很简单,我第一次循环做的直接超时,没想到怎么优化,然后误以为有公式,推了半个小时的公式,测试都对,提交一直wa,然后考虑k>35就直 ...
- 记第七届ACM校赛-回忆
这一次校赛其实是两个月半之前的事情了---4月29日.那天比赛完之后,自己就想当天写写这一次比赛的事,但是由于那天比赛完之后又马上又赶回家,5个小时的比赛加上2个小时的车程,整个人都觉得很累,所以那天 ...
- 第三十届ACM/ICPC 世界总决赛题目解析
第三十届ACM/ICPC 世界总决赛题目解析 斯坦福大学 王颖
- 2016第七届ACM山东省赛
"题目说的是输出编号.输出编号!!" "好,改好了." "交." 最后两分钟再一次提交了代码. no - wrong. 奋战到最后一秒 ...
- 2016山东省第七届ACM省赛总结
好久都没更过了 前段时间真是心态不好 状态也不好 都不打算练了 自己堕落了一阵子 醒悟了 感觉还是应该干些正事 加上去北京旅游(lanqiao)待了几天 心情也好多了 啊 自己太水 还要接着干. 好 ...
- 2018年第十届ACM四川省省赛题解(10 / 11)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2018ACM四川省省赛 题目链接:https://www.oj.swust.edu.cn/probl ...
- 河南省第十届ACM赛题
本届赛题难度不是太大,9道题目我们队一共做了7道拿了个银,很遗憾没有能为我们学校带来首金. 贴上我们队的ac的代码留个纪念,题目我就不一个一个字码出来了,直接上照片,没做的题我就不在贴了... A题: ...
- 2018浙江第十五届ACM省赛题解(待补完)
题目链接 http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=378 没有solution的题目待补 A 暴力 无技巧 ...
- 山东省第六届ACM省赛总结—— 正式赛篇
其实没必要搞一个上下篇啊,整的跟写小说似得...不过既然写了,就继续写吧,哈哈╮(╯▽╰)╭ 10号,又起一大早,老师说早上吃完早点就去退房,所以我们大清早的洗漱完就收拾东西了,ZX弟下楼领的早餐券, ...
- 山东省第十届ACM浪潮杯补题
第一次参加省赛,可能也是最后一次了..有点遗憾,但是收获还是很多的.济南大学真大,饭菜也很好吃,志愿者小姐姐也很漂亮.上来题出的很快,差不多不到一个半小时就出了五道题,然后wa了两发.后面三个半小时全 ...
最新文章
- 【Leetcode】刷题之路4(python版)
- azure container 的命名规则
- NYOJ 662 汽水瓶
- c语言删除文件第一行_ElasticSearch 文档的删除和批量操作
- nginx $mail-send()发送邮件报错_基于SMTP协议的E-MAIL电子邮件发送客户端软件C#实现...
- mac mysql 的lb_四层LB和七层LB
- SQL Server 2005混合模式登录配置
- RF-接口自动化测试-「Body Data格式」
- Python图像处理库PIL的基本概念介绍
- 微信java版_JAVA版微信支付V3-完全版
- vue 过滤器 首字母大写
- Android中你不得不知的几个问题及解决方法
- 2019年最实用的导航栏设计实践和案例分析全解
- kodi+java版_[转] Emby+KODI--完美的NAS多媒体方案
- 【译】Executor, ExecutorService 和 Executors 间的不同
- C语言重载宏函数的小技巧
- HTML页面添加背景音乐
- repo 命令的用法
- 复杂网络分析(三)(UCINET)
- 个人总结的一个VMP脱壳步骤
热门文章
- 动态规划——Weighted Interval Scheduling
- torch.nn.functional.normalize详解
- 复位电路加二极管的作用
- 简单解决SVN cleanup failed to process the following paths错误
- 【循序渐进学运维】MySQL运维系列文章汇总
- 1469: 数星星(结构体专题)
- android删除sdcard文件系统,Android 5.0+删除Sdcard文件
- minus subtract deduct这三个单词的区别
- 应用宝上线应用后一直处于审核状态问题解决
- (1)线性空间基本概念