您当前的位置: 首页 > 

MangataTS

暂无认证

  • 3浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

P1955 [NOI2015] 程序自动分析

MangataTS 发布时间:2021-05-04 11:49:37 ,浏览量:3

解题思路

输入的数据有满足约束和不满足约束,很明显我们能解决的是等于的情况,用并查集直接将相等的两个变量合并起来,并且我们很明显能发现是否满足条件和判断的顺序是无关的,所以我们可以先将相等的变量进行合并然后再判断后面不相等的是否满足即可(换句话说我们通过排序,先处理相等的变量,再处理),注意的是这里的i,j可能很大,所以我们不能直接开数组,于是我用的map表示的fa数组

Code
#include
using namespace std;

unordered_map fa;

const int N = 1e6+10;
struct Node {
    int a,b,c;
}V[N];

bool cmp(Node a,Node b) {
    return a.c > b.c;
}

int find(int x) {
    int t = x;
    while(t != fa[t]) t = fa[t];
    while(x != fa[x]) {
        int temp = fa[x];
        fa[x] = t;
        x = temp;
    }
    return x;
}

void merge(int a,int b) {
    a = find(a);
    b = find(b);
    if(a != b) {
        fa[b] = a;
    }
}

int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--) {
        cin>>n;
        fa.clear();
        for(int i = 1;i             
关注
打赏
1665836431
查看更多评论
0.0399s