首页 > 其他分享 >2023NOIP T2

2023NOIP T2

时间:2023-11-19 10:33:54浏览次数:45  
标签:return int d% T2 tot fa findset 2023NOIP

考场上乱打的40

并查集可做。

点的修改其实就是新建一个点,最后点的编号要和最初的点在一个组。

有个坑,自己可以和自己取反。也不算坑吧,写代码的时候没注意到。

还是有很多技巧,只能说经验不足。

#include <bits/stdc++.h>
using namespace std ;
const int N = 500005 ;
int n, m, fa[N], pos[N], c, t, T, F, U, tot, ans = 0, cnt = 0 ;
char s[2] ;int findset(int x)
{
    if(x == fa[x]) return x ;
    return fa[x] = findset(fa[x]) ; 
}
void unionset(int a, int b)
{
    int x = findset(a), y = findset(b) ;
    if(x == y) return ;
    fa[x] = y ;
    return ;
}
int main()
{
    //freopen("tribool3.in", "r", stdin) ;
    //freopen("tribool3.out", "w", stdout) ;
    scanf("%d%d", &c, &t) ;
    while(t --)
    {
        scanf("%d%d", &n, &m) ;
        cnt = n ;
        tot = n + m ;
        T = tot * 2 + 1, F = tot * 2 + 2 , U = tot * 2 + 3 ; 
        for(int i = 1; i <= tot * 2 + 3 ; i ++) fa[i] = i ;
        for(int i = 1; i <= n; i ++) pos[i] = i ;
        for(int i = 1; i <= m; i ++)
        {
            scanf("%s", s) ;
            int a, b ;
            scanf("%d", &a) ; 
            if(s[0] == 'T' || s[0] == 'F' || s[0] == 'U')
            {
                pos[a] = ++cnt ;
                if(s[0] == 'T') unionset(pos[a], T), unionset(pos[a] + tot, F) ;
                if(s[0] == 'F') unionset(pos[a], F), unionset(pos[a] + tot, T) ;
                if(s[0] == 'U') unionset(pos[a], U), unionset(pos[a] + tot, U) ;
            }
            else if(s[0] == '+')
            {
                scanf("%d", &b) ;
                int y = pos[b] ;
                pos[a] = ++cnt ;
                unionset(pos[a], y) ;
                unionset(pos[a] + tot, y + tot) ;
            }
            else if(s[0] == '-')
            {
                scanf("%d", &b) ;
                int y = pos[b] ;
                pos[a] = ++cnt ;
                unionset(pos[a], y + tot) ;
                unionset(pos[a] + tot, y) ;
            }
        }
        for(int i = 1; i <= n; i ++){
            unionset(i, pos[i]) ;
            unionset(i + tot, pos[i] + tot) ;
        }
        for(int i = 1; i <= n; i ++) 
        {
            if(findset(i) == findset(i + tot))
            {
                unionset(i, U) ;
            }
        }
        ans = 0 ;
        for(int i = 1; i <= n; i ++) 
        {
            if(findset(i) == findset(U)) ans ++ ;
        }
        printf("%d\n", ans) ;
    }
    return 0 ;
}

 

标签:return,int,d%,T2,tot,fa,findset,2023NOIP
From: https://www.cnblogs.com/ybC202444/p/17841677.html

相关文章

  • t2
    importjava.util.Comparator;importjava.util.List;importjava.util.Map;importjava.util.UUID;importjava.util.concurrent.ConcurrentHashMap;importjava.util.stream.Collectors;/***本题答题框内的代码仅为待实现代码,执行或提交代码时,仅包含待实现部分(含所需的import)......
  • 2023最新!Git2
    2023最新!Git2.40.0于win10环境下的安装git官网地址:https://git-scm.com/download/win/导航目录2023最新!Git2.40.0于win10环境下的安装导航一、下载Git二、安装Git三、检验一、下载GitGit官网选择自己所需的版本下载二、安装Git双击安装程序,并选择next推荐更换路径(避免文......
  • 2023NOIP A层联测32 T4 红楼 ~ Eastern Dream
    2023NOIPA层联测32T4红楼~EasternDream根号分治加分块。Ps:分块后面真的用的多。思路考虑根号分治,将\(x\)分为\(x\leq\sqrtn\)的情况和\(x>\sqrtn\)的情况。\(x\leq\sqrtn\)由于这一部分较小,如果在线段上暴力添加肯定会超时。先设\(f_{x,i}\)表示模\(......
  • add方法在return的适时候就形成了一个闭包,包含n=4399这个值,这个n不是result和result2
    在浏览器控制台中执行以下代码,输出的结果是functiontest(){varn=4399;functionadd(){n++;console.log(n);}return{n:n,add:add}}varresult=test();varresult2=test();result.add();result.add();console.log(result.n)......
  • 2023NOIP A层联测32
    2023NOIPA层联测32目录2023NOIPA层联测32AflandreB.meirinC.sakuyaD.红楼~EasternDream总结Aflandre有\(n\)种烟花,每种烟花有两个参数\(a,b\),你要构造一种燃放顺序,使得\(b\)的和最大,\(b\)会改变,具体来说:设\(i\)在\(j\)前燃放,那么。\(a_i<a_j\),则\(b_......
  • 2023NOIP停课集训总结
    2023NOIP停课集训总结​ 距离十八次的NOIP模拟赛结束只剩下三四天了,NOIP也将在11.18周六如期举行。​ 在这次从2023.10.1至2023.11.18的集训中,我确实有了许多收获,感到自己的知识经验积累更加丰富。​ 下面我将从几个方面对此次集训进行总结。1.知识点的收获分块分块是一种......
  • 2023NOIP A层联测31 T4 民主投票
    2023NOIPA层联测31T4民主投票思维好题。思路首先可以设\(s\)每个人最多获得的票数,一开始所有点都把自己的票投给自己父亲。如果一个点的票数超过\(s\)了,那么这个点肯定要把票分给他的父亲。设\(f_{u,s}\)为\(u\)点在最多获得\(s\)票的情况下要向父亲分的票数(不......
  • 【pwn】[HNCTF 2022 WEEK2]ret2libc --rop构造泄露libc
    这道题是简单的libc,不过多分析了exp:frompwnimport*fromLibcSearcherimport*io=remote("node5.anna.nssctf.cn",28341)elf=ELF("./pwn")put_got=elf.got["puts"]put_plt=elf.plt["puts"]main_addr=0x4011A6rdi=0x401273  #用RO......
  • 2023NOIP A层联测30 总结
    2023NOIPA层联测30总结题目T1草莓列车\(n\leq10^5,m\leq10^7\)赛时思路一开始看错\(m\)数据范围,以为\(O(m\logm)\)可以过,后来发现问题以后,集中在考虑线段树之类的\(\log\)级别的算法维护序列,或者线段区间,一直没有想过ST表相关数据结构,于是最后只有60。赛后......
  • 2023NOIP A层联测31总结
    2023NOIPA层联测31总结\(T1\)暴力操作:给你一个长度为\(n\)的序列\(a\),你可以花费\(c_x\)使得\(a_i\)变为\([a_i/x]\),你总共有\(k\)元。为最终序列的中位数最小是多少。保证\(n\)为奇数。\(n,m\le5*10^5\)首先想到了二分一个答案,因为只要使得前\((n+1......