题意:

有一个运动场,运动场的坐席是环形的,有1~300共300列座位,每列按有无限个座位计算T_T。

输入:

有多组输入样例,每组样例首行包含两个正整数n, m。分别表示共有n个人,m次操作。

接下来m行,每行包含a, b, x三个整数,表示a在b右边x个位置。

输出:

如果a,b的关系已经存在,新操作如果获得的位置关系与已存在的关系不同,则ans+1。输出ans,每组输出占一行。

用加权并查集可以解决。权值存在val[]数组里,val[i]的含义为从i到根节点的距离。

由于是一个长度为300的环形座位,所以每次算得的结果都需要mod 300(然而实际上不mod 300也可以ac)。

具体见代码——

 #include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; const int N = ;
const int M = ; int fm[N], val[N];
int a, b, x;
int n, m;
int ans; void init()
{
for(int i = ; i <= n; i++)
{
fm[i] = i;
val[i] = ;
}
ans = ;
} int mfind(int x)
{
if(x == fm[x]) return x;
int t = fm[x];
fm[x] = mfind(fm[x]);
val[x] += val[t];
val[x] %= M;
return fm[x];
} void mmerge()
{
int fx = mfind(a);
int fy = mfind(b);
if(fx != fy)
{
fm[fx] = fy;
val[fx] += val[b]-val[a]+x; //由于需要获得的是从fx到fy的距离,所以需要以b与a的相对距离再加上x
val[fx] %= M;
}
else
{
if((val[a]-val[b]+M)%M != x%M) ans++;
}
} void work()
{
while(m--)
{
scanf("%d%d%d", &a, &b, &x);
mmerge();
}
printf("%d\n", ans);
} int main()
{
//freopen("test.in", "r", stdin);
while(~scanf("%d%d", &n, &m))
{
init();
work();
}
return ;
}

最新文章

  1. linux grep命令
  2. ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets(转)
  3. 掌握VS2010调试 -- 入门指南
  4. Docker on CentOS for beginners
  5. Java 获取类名,函数名,行数
  6. CentOS 学习笔记
  7. Oracle 中union的用法
  8. HDOJ/HDU 2560 Buildings(嗯~水题)
  9. Java学习----this和super(在继承中)
  10. Ensures there will be no &#39;console is undefined&#39; errors
  11. 1.Solution的Build、Rebuild和Clean
  12. quick-cocos2d-x教程8:程序框架内lib文件夹分析
  13. ArcGIS Server注册数据库——以oracle为例
  14. go微服务框架go-micro深度学习(二) 入门例子
  15. Python中给List添加元素的4种方法
  16. 数据结构(C语言版)-第5章 树和二叉树
  17. 使用UTL_HTTP时遭遇ORA-29273
  18. 特来电CMDB应用实践
  19. Goroutines和Channels(一)
  20. ASP.NET Core学习总结(1)

热门文章

  1. PHP Zend Studio9.0怎么把代码搞成和服务器端的同步(就是直接在服务器端修改)
  2. 关联式容器(associative containers)
  3. Thread的第五天学习
  4. 表单验证插件——validate
  5. [原创]使用命令行工具提升cocos2d-x开发效率(一)之TexturePacker篇
  6. 简单的XPath入门
  7. TCP-心跳
  8. arcgis engine 开发之QI
  9. 查看局域网内某个ip的mac地址
  10. python写的第一个简单小游戏-猜数字