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-八纵八横相关推荐

  1. 第十届ACM山东省赛总结

    省赛结束了,排名打铁,只出了四题.前三个小时只出了一道题.M题很简单,我第一次循环做的直接超时,没想到怎么优化,然后误以为有公式,推了半个小时的公式,测试都对,提交一直wa,然后考虑k>35就直 ...

  2. 记第七届ACM校赛-回忆

    这一次校赛其实是两个月半之前的事情了---4月29日.那天比赛完之后,自己就想当天写写这一次比赛的事,但是由于那天比赛完之后又马上又赶回家,5个小时的比赛加上2个小时的车程,整个人都觉得很累,所以那天 ...

  3. 第三十届ACM/ICPC 世界总决赛题目解析

    第三十届ACM/ICPC 世界总决赛题目解析 斯坦福大学 王颖

  4. 2016第七届ACM山东省赛

     "题目说的是输出编号.输出编号!!" "好,改好了." "交." 最后两分钟再一次提交了代码. no  -  wrong. 奋战到最后一秒 ...

  5. 2016山东省第七届ACM省赛总结

    好久都没更过了 前段时间真是心态不好 状态也不好 都不打算练了 自己堕落了一阵子 醒悟了 感觉还是应该干些正事 加上去北京旅游(lanqiao)待了几天 心情也好多了 啊 自己太水 还要接着干. 好 ...

  6. 2018年第十届ACM四川省省赛题解(10 / 11)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2018ACM四川省省赛 题目链接:https://www.oj.swust.edu.cn/probl ...

  7. 河南省第十届ACM赛题

    本届赛题难度不是太大,9道题目我们队一共做了7道拿了个银,很遗憾没有能为我们学校带来首金. 贴上我们队的ac的代码留个纪念,题目我就不一个一个字码出来了,直接上照片,没做的题我就不在贴了... A题: ...

  8. 2018浙江第十五届ACM省赛题解(待补完)

    题目链接 http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=378 没有solution的题目待补 A 暴力 无技巧 ...

  9. 山东省第六届ACM省赛总结—— 正式赛篇

    其实没必要搞一个上下篇啊,整的跟写小说似得...不过既然写了,就继续写吧,哈哈╮(╯▽╰)╭ 10号,又起一大早,老师说早上吃完早点就去退房,所以我们大清早的洗漱完就收拾东西了,ZX弟下楼领的早餐券, ...

  10. 山东省第十届ACM浪潮杯补题

    第一次参加省赛,可能也是最后一次了..有点遗憾,但是收获还是很多的.济南大学真大,饭菜也很好吃,志愿者小姐姐也很漂亮.上来题出的很快,差不多不到一个半小时就出了五道题,然后wa了两发.后面三个半小时全 ...

最新文章

  1. 【Leetcode】刷题之路4(python版)
  2. azure container 的命名规则
  3. NYOJ 662 汽水瓶
  4. c语言删除文件第一行_ElasticSearch 文档的删除和批量操作
  5. nginx $mail-send()发送邮件报错_基于SMTP协议的E-MAIL电子邮件发送客户端软件C#实现...
  6. mac mysql 的lb_四层LB和七层LB
  7. SQL Server 2005混合模式登录配置
  8. RF-接口自动化测试-「Body Data格式」
  9. Python图像处理库PIL的基本概念介绍
  10. 微信java版_JAVA版微信支付V3-完全版
  11. vue 过滤器 首字母大写
  12. Android中你不得不知的几个问题及解决方法
  13. 2019年最实用的导航栏设计实践和案例分析全解
  14. kodi+java版_[转] Emby+KODI--完美的NAS多媒体方案
  15. 【译】Executor, ExecutorService 和 Executors 间的不同
  16. C语言重载宏函数的小技巧
  17. HTML页面添加背景音乐
  18. repo 命令的用法
  19. 复杂网络分析(三)(UCINET)
  20. 个人总结的一个VMP脱壳步骤

热门文章

  1. 动态规划——Weighted Interval Scheduling
  2. torch.nn.functional.normalize详解
  3. 复位电路加二极管的作用
  4. 简单解决SVN cleanup failed to process the following paths错误
  5. 【循序渐进学运维】MySQL运维系列文章汇总
  6. 1469: 数星星(结构体专题)
  7. android删除sdcard文件系统,Android 5.0+删除Sdcard文件
  8. minus subtract deduct这三个单词的区别
  9. 应用宝上线应用后一直处于审核状态问题解决
  10. (1)线性空间基本概念