首页 > 其他分享 >洛谷 P1656 炸铁路

洛谷 P1656 炸铁路

时间:2024-03-26 09:45:38浏览次数:30  
标签:sz set 洛谷 int P1656 铁路 fa vector size

题意:n个点,m条边,问有哪条边是去掉之后,会造成之前连通的点不再连通的?n <= 150, m <= 5000.

思路:连通算法有dfs+bool数组记录,或者dsu,感觉dsu更方便。m * n 不超过1e6,直接暴力。

class DisjointSet{
public:
    DisjointSet(int sz): sz_(sz){
        set_size_.assign(sz_, 1);
        fa_.resize(sz_);
        iota(fa_.begin(), fa_.end(), 0);
    }

    int findSet(int x){ return fa_[x] == x ? x : fa_[x] = findSet(fa_[x]); }

    int getSetSize(int x){ return set_size_[findSet(x)]; }

    bool unionSet(int x, int y){
        x = findSet(x);
        y = findSet(y);
        if (x == y){
            return false;
        }
        fa_[x] = y;
        set_size_[y] += set_size_[x];
        return true;
    }

private:
    int sz_;
    vector<int> fa_;
    vector<int> set_size_;

};


void solve(){
    int n, m;
    cin >> n >> m;

    DisjointSet dsu(n + 1);
    vector<vector<int>> al(n + 1);
    vector<pair<int, int>> edges;
    for (int i = 1; i <= m; ++i){
        int u, v;
        cin >> u >> v;
        dsu.unionSet(u, v);
        if (u > v){
            swap(u, v);
        }
        edges.emplace_back(u, v);
    }

    vector<int> pos;
    for (int i = 0; i < m; ++i){
        DisjointSet dsu2(n + 1);
        for (int j = 0; j < m; ++j){
            if (j != i){
                dsu2.unionSet(edges[j].first, edges[j].second);
            }
        }
        for (int k = 1; k <= n; ++k){
            if (dsu2.getSetSize(k) != dsu.getSetSize(k)){
                pos.emplace_back(i);
                break;
            }
        }
    }

    sort(pos.begin(), pos.end(), [&](int i, int j){
            return edges[i].first != edges[j].first ? edges[i].first < edges[j].first : edges[i].second < edges[j].second;
         });

    for (const int& index : pos){
        cout << edges[index].first << " " << edges[index].second << "\n";
    }

}

总结:使用下标数组排序,可以避免再次存储答案占用更多内存。 unionSet里面返回值一定要写。
image

标签:sz,set,洛谷,int,P1656,铁路,fa,vector,size
From: https://www.cnblogs.com/yxcblogs/p/18095909

相关文章

  • 拓扑排序 洛谷B3644家谱树解法
    #include<bits/stdc++.h>usingnamespacestd;intd[101];//d[i]表示i点的入度个数intt[101][101];//t[i][j]表示i点到j点间有一条有向边queue<int>q;//q表示当前入度为0的节点intmain(){ //所有数组初始化为0 memset(d,0,sizeof(d)); memset(t,0,sizeof(t......
  • 洛谷之P1563 [NOIP2016 提高组] 玩具谜题
    题目 [NOIP2016提高组]玩具谜题题目背景NOIP2016提高组D1T1 题目描述小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时singer告诉小南一个谜......
  • 洛谷题单算法1-6二分查找与二分答案
    代码仅供参考,不足之处望理解。P2249【深基13.例1】查找#include<iostream>usingnamespacestd;constintN=1e6+5;intn,m,a[N];intmain(){ios::sync_with_stdio(false);//输入cin>>n>>m;for(inti=1;i<=n;i++)cin>>a[i];for(inti=1......
  • 洛谷P3498 [POI2010] KOR-Beads 题解
    P3498[POI2010]KOR-Beads对于数列${A_i}$,求$k$使数列被分为$\lfloor\frac{n}{k}\rfloor$个部分后不同子数列种类最多(子串翻转前后为一类子串)很容易想到:枚举$k\\in\[1,n]$,记录每个$k$下不同种类数,然后取最优即可,那么问题来了:如何计算种类数?暴戾算法:一种纯......
  • C语言:洛谷题目分享(4)小书童--凯撒密码和笨小猴
    目录1.前言2.俩道题目1.小书童--凯撒密码1.题目背景2.题目描述3.输入格式4.输出格式5.题解2.笨小猴1.题目描述2.输入格式3.输出格式4.题解3.小结1.前言哈喽大家好啊,今天我继续为大家分享洛谷题单的俩道题目,请大家多多支持喔~2.俩道题目1.小书童--凯撒密码......
  • 洛谷题单指南-集合-P1525 [NOIP2010 提高组] 关押罪犯
    原题链接:https://www.luogu.com.cn/problem/P1525题意解读:有很多罪犯,要关到两座监狱,有一些罪犯之间有仇,并且可以量化出仇恨值,如果关在一起就会冲突,造成的影响就是仇恨值,要使得造成的影响最小,如果可以完全不起冲突,输出0。解题思路:首先,要让冲突影响最小化,显然应该把仇恨大的罪犯......
  • 洛谷 P1379 八数码难题 A* 题解
    刚做完一道模板A*,看到这题我直接小脑萎缩了...阿米诺斯!这怎么用A*?!——刚开题的我beeeeeeeeeelike甚至比模板简单(这是绿的...)其实会是会但是纸张的是这玩意我不会搞估价函数我草!然后突然想到能不能把这个状态下有多少个数字不在目标位置作为估价函数?我喜欢\(IDA*\),有兴趣......
  • 洛谷-P2178 学习笔记
    题面[NOI2015]品酒大会题目描述一年一度的“幻影阁夏日品酒大会”隆重开幕了。大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加。在大会的晚餐上,调酒师Rainbow调制了\(n\)杯鸡尾酒。这\(n\)杯鸡尾酒排成一......
  • 洛谷题单指南-集合-P1102 A-B 数对
    原题链接:https://www.luogu.com.cn/problem/P1102题意解读:前文https://www.cnblogs.com/jcwy/p/18043197介绍了二分和双指针的做法,本文介绍hash的做法。解题思路:定义map<int,int>h,保存每个数+c出现的个数同样,先将所有数由小到大哦排序遍历每一个数x,答案累加ans+=h[x]然......
  • 洛谷题单指南-集合-P5266 【深基17.例6】学籍管理
    原题链接:https://www.luogu.com.cn/problem/P5266题意解读:本题考察map的应用。解题思路:直接使用map即可解题。100分代码:#include<bits/stdc++.h>usingnamespacestd;map<string,int>h;stringname;intn,op,score;intmain(){cin>>n;while(n--)......