缩点(有待题目检验,代码不可靠)

#include <bits/stdc++.h>
using namespace std;

const int maxn = 2e6;
int head[maxn];
int bel[maxn];
int w[maxn];
bool vis[maxn];
int cnt = 0, n;

struct node{
    int to, nxt;
}e[maxn];

void init(){
    memset(head, -1, sizeof head);
    memset(vis, false, sizeof vis);
    cnt = 0;
}

void addedge(int u, int v){
    e[cnt].to = u;
    e[cnt].nxt = head[u];
    head[u] = cnt++;
}

void bfs(){//缩点
    queue<int>q;
    q.push(1);
    memset(vis, false, sizeof vis);
    while(!q.empty()){
        int u = q.front();
        q.pop();
        if(vis[u]) continue;
        vis[u] = true;
        for(int i = head[u]; ~i; i = e[i].nxt){
            int v = e[i].to;
            if(!vis[v] && w[u] == w[v]){
                bel[v] = bel[u];
                q.push(v);
            }
        }
    }
    for(int i = 1; i <= n; ++i){
        for(int j = head[i]; ~j; j = e[j].nxt){
            int v = e[j].to;
            if(bel[v] != bel[i])
                addedge(bel[i], bel[v]);
        }
    }
}

int main(){
     cin >> n;
    for(int i = 1; i <= n; ++i) bel[i] = i;
}
时间: 2024-12-20 11:45:09

缩点(有待题目检验,代码不可靠)的相关文章

洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码

洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要使用它需要一定的费用.m条单向通道连接相邻的两对情侣所在电影院.然后HXY有个绝技,如果她能从一个点开始烧,最后回到这个点,那么烧这条回路上的情侣的费用只需要该点的汽油费即可.并且每对情侣只需烧一遍,电影院可以重复去.然后她想花尽

【南阳OJ分类之语言入门】80题题目+AC代码汇总

声明: 题目部分皆为南阳OJ题目. 代码部分包含AC代码(可能不止一个)和最优代码,大部分都是本人写的,并且大部分为c代码和少部分c++代码and极少java代码,但基本都是c语言知识点,没有太多差别,可能代码有的写的比较丑,毕竟知识有限. 语言入门部分题基本都较为简单,是学习编程入门的很好练习,也是ACM的第一步,入门的最佳方法,望认真对待. 本文由csdn-jtahstu原创,转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:1373758426和csdn博客地址. now begi

POJ题目Java代码(一)

POJ 1001 Exponentiation import java.math.BigDecimal; import java.util.Scanner; public class Poj1001 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ BigDecimal bigDecimal = new BigDecimal(sc.next())

一道算法题目, 二行代码, Binary Tree

June 8, 2015 我最喜欢的一道算法题目, 二行代码. 编程序需要很强的逻辑思维, 多问几个为什么, 可不可以简化.想一想, 二行代码, 五分钟就可以搞定; 2015年网上大家热议的 Homebrew 的作者 Max Howell 面试 Google 挂掉的一题, 二叉树反转, 七行代码, 相比二行代码, 情有可原! Problem: return the count of binary tree with only one child 想一想, 你要写几行, 六七行, 或小于十行? S

【南阳OJ分类之大数问题】题目+AC代码汇总

声明:题目部分皆为南阳OJ题目,代码部分包含AC代码(可能不止一个)和标程. 由于大数问题用c/c++写比较麻烦,而Java的大数类又很好用,所以基本为java代码.实际上竞赛很少会考大数问题,因为竞赛是比的算法,而不是语言特性,不过很多都是大数据,数据上千万级别的,所以算法又很关键,显然那和这篇博客也没啥关系. 题目不是太难,大家和本人就权当学习或复习下Java吧O(∩_∩)O~. 该分类南阳oj地址:http://acm.nyist.edu.cn/JudgeOnline/problemset

随机生成题目的代码分析

随机生成的算法比较简单,主要优点在于 改进了以往竞赛代码风格,一个函数实现若干功能.那样确实不太适合做工程. 用高内聚低耦合的原则,将功能细化,分别实现了几个类, 确实能够显著提高了代码的可重用性,可读性. 其中随机类就是从我以前实现的代码里直接粘过来用的,一个类封装好了,的确能重复使用.省去了重复编码的时间,类似于模板,stl 1 class Random{ 2 public: 3 void init(){ 4 srand(time(0)); 5 } 6 ///return number in

晚上跑步思考出来的几个题目,代码以后补上。

第一题 给定一个矩阵,打印输出顺时针旋转90°的矩阵. (创新工场和PPTV都有) 示例:输入矩阵是 1,  2,  3,  4 5,  6,  7,  8 9,  10,11,12 13,14,15,16 打印结果应该是 13, 9, 5, 1 14,10,6,2 15,11,7,3 16,12,8,4 找到规律就出来了. 考察点 (1)原地输出,空间复杂度为0(1). 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度.如当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小

检验邮箱格式是否合法(Java代码实现)

一.检验邮箱地址是否满足以下要求: 1.有且只有一个@ [email protected]不能放在开头或者结尾 [email protected]之后必须有"." [email protected]之前或之后不能紧跟 "." [email protected]之前要有6个字符 6.以com.org.cn.net结尾 二.代码实现: 1.实现代码 package homework3; //邮箱检验是否合格 public class CheckEmail { publi

结对项目(自动生成四则运算题目程序)

一.Github项目地址:https://github.com/Vigor-creat/-.git 项目成员:胡兆禧 3118005092  余金龙 3118005116 二.PSP PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划     · Estimate · 估计这个任务需要多少时间 30 48 Development 开发     · Analysis · 需求分析 (包括学习新技术) 120 1