zoj 2833这次真的很顺利了。。居然是因为数组的大小没有符合要求,瞎折腾了很久。。没有注意到要求范围,真是该死!

想法很简单,就是定义一个父结点数组,下标 i 表示这个元素,初始化为 -1表示 这个元素的朋友只有自己,当parent[i]为负数时,朋友的个数就是|parent[i]| 即绝对值,如果parent[i]为正数,则表示 i的父结点。通过find找到i的根,其中使用了权重合并,即结点少的合并在结点多的树上。注意如果根相同,即已经 是朋友了,就不需要再合并了。 真是好神奇的并查集,将正数负数用得如此淋漓尽致!这次终于算是我独立写出来的了,好高兴!

//
// //#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include"memory.h"
using namespace std;
#define Maxsize 100000//最多元素个数
int parent[Maxsize];
void WeightedUnion(int i, int j)
{
//基于权重对根合并,将结点少的合并到结点多的
int temp = parent[i] + parent[j];
if (parent[j] < parent[i])//i的结点比较少
{
parent[i] = j;//i 成为j的结点
parent[j] = temp;//j 的结点等于 i+j
}
else//i的结点多于或等于j 的结点
{
parent[j] = i;
parent[i] = temp;
}
}
int findparent(int i)
{
while (parent[i] >= 0)//不为根
{
i = parent[i];
}
return i;
}
int main( )
{ int n, m, x, y, flag = 0, count = 0;
char c; while (scanf_s("%d%d", &n, &m) != EOF)
{
memset(parent, -1, sizeof(parent));//将每个根置为-1 while (m--)
{ cin >> c;//gets(c);//scanf_s("%c",&c);
if (c == 'M')//M交朋友,调整根的数据
{
scanf_s("%d%d", &x, &y);
x = findparent(x);//找到自己所在的根
y = findparent(y);
if (x != y)//不是同一个根,不为friend
{
WeightedUnion(x, y);
}
}
else
if (c == 'Q')//询问,输出friend个数
{
scanf_s("%d", &x);
if (flag == 0)
{
if (count++ != 0)
printf("\n");
printf("Case %d:\n", count);
flag = 1;
} printf("%d\n", -parent[findparent(x)]);//求到根,输出这棵树有多少结点 } }
flag = 0;
}
return 0;
}

by the way ,因为vs编译的,如果要AC要将#include "stdafx.h"去掉和将
scanf_s改成scanf

这次还发现了以前犯得一个蠢爆了的问题,真是气死我了!

zoj 2833 friendship的更多相关文章

  1. ZOJ:2833 Friendship(并查集+哈希)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2833 A friend is like a flower, a rose ...

  2. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  3. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  4. POJ 1815 Friendship

    Friendship Time Limit: 2000MS   Memory Limit: 20000K Total Submissions: 10626   Accepted: 2949 Descr ...

  5. ZOJ 3686 A Simple Tree Problem

    A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a rooted tree, each no ...

  6. ZOJ Problem Set - 1394 Polar Explorer

    这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...

  7. ZOJ Problem Set - 1392 The Hardest Problem Ever

    放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...

  8. ZOJ Problem Set - 1049 I Think I Need a Houseboat

    这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...

  9. ZOJ Problem Set - 1006 Do the Untwist

    今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...

随机推荐

  1. iOS UITableView 移除单元格选中时的高亮状态

    在处理UITableView表格时,我们希望用户能够和触摸单元格式进行交互,但是希望用户在完成交互之后,这些单元格的选中状态能够消失,.Cocoa Touch 提供了两种方法来防止单元格背持久选中. ...

  2. cat <<EOF用法

    转自:http://blog.csdn.net/apache0554/article/details/45508631 cat <<EOF和cat <<-EOF两个都是获取st ...

  3. Windows Server 2008 R2 辅域控制器如何升级成主域控制器

    一.实验模拟故障问题: zhuyu公司架设了一台主域控制器和一台辅域控制器,某一天,zhuyu公司的主域控制器系统崩溃,主域控制器系统也进不去. 虽然辅域控制器可以暂时代替主域控制器的普通工作,但是特 ...

  4. [SLAM]2D激光扫描匹配方法

    1.Beam Model 2.Likehood field for k=1:size(zt,1) if zt(k,2)>0 d = -grid_dim/2; else d = grid_dim/ ...

  5. network config

    ifcfg-ens32 --static TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes ...

  6. Groovy学习笔记(二)

    在上一篇文章中我们主要学习了如何搭建Groovy开发环境,为我们的Groovy之旅做好了准备工作,不知道你是否准备好了?接下来我们就一起看看Groovy与我们熟悉的Java有什么异同. Groovy是 ...

  7. 获取表单选中的值(利用php和js两种方式)

    php代码中获取表单中单选按钮的值: (单选按钮只能让我们选择一个,这里有一个“checked”属性,这是用来默认选取的,我们每次刷新我们的页面时就默认为这个值.) 例: <form name= ...

  8. Qt之重写QLabel类

    在mylabel.h 文件中#ifndef MYLABEL_H#define MYLABEL_H #include <QLabel>/*重新实现QLabel类,使其支持点击事件*/clas ...

  9. struts1

    1.简单应用示例 导入struts1的jar包,然后配置xml,写java和jsp /struts/WebRoot/Login.jsp <%@ page language="java& ...

  10. WITH AS的含义

    一.WITH AS的含义WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让S ...