求调(玄关)
查看原帖
求调(玄关)
1089576
zhaohaocheng1234楼主2024/7/18 21:07

我和我同学在机房调了 2h\text{2h},一直是 30\text{30} 分。

我查了一下本题以前的题解区和讨论版:发现题解全是并查集(我写的是模拟),讨论版中有一个帖用的也是模拟。

问题好像是“输入 aa 吃 bb bb 吃 cc 之后再输入 aa 吃 cc 程序就挂了”。有没有是模拟且 AC\text{AC} 大佬帮忙调一下,谢谢qwq。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<unordered_map>
#include<bitset>
#include <climits>
using namespace std;
const int MAXN=100005;
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while (ch<'0'||ch>'9'){
        if (ch=='-') f=-1;
        ch=getchar();
    }
    while (ch>='0'&&ch<='9'){
        x=x*10+ch-48;
        ch=getchar();
    }
    return x*f;
}
int a[MAXN];
signed main(){
    int n,k;
    int ans=0;
    n=read();k=read();
    for(int i=1;i<=k;i++){
        int op,x,y;
        op=read();x=read();y=read();
        if(max(x,y)>n){
            ans++;
            continue;
        }
        if(x==y&&op==2){
            ans++;
            continue;
        }
        if(op==1){
            if((a[y]==x&&a[x]!=y)||(a[x]==y&&a[y]!=x)){
                ans++;
                continue;
            }else{
                a[y]=x;
                a[x]=y;
            }
        }else{
            if(a[x]==y&&a[y]==x){
                ans++;
                continue;
            }else{
                if(a[y]==x&&a[x]!=y){
                    ans++;
                    continue;
                }else{
                    a[x]=y;
                }
            }
        }
    } 
    cout<<ans;
    return 0;
}
2024/7/18 21:07
加载中...