首页 > 其他分享 >D - New Friends

D - New Friends

时间:2024-04-20 23:23:05浏览次数:28  
标签:int Graph void 子图 visited New Friends addEdge

D - New Friends

https://atcoder.jp/contests/abc350/tasks/abc350_d

 

思路

此sns网络,可能包括若干个连同子图,

对于每个子图, 计算 连通子图中 成员数目, 和 连接数目,

计算全连接子图,需要的总的连接数目, 减去当前连接数目, 得到每个连通子图的 还需要建立的 连接数目,

累加所有子图的  待建立连接数据, 得到答案。

 

Code

https://atcoder.jp/contests/abc350/submissions/52621997

/******************************** GRAPH START ***************************************/
// Graph class represents a directed graph
// using adjacency list representation
class Graph {
public:
    map<int, list<int> > adj;
    
    // for search linked block
    map<int, bool> visited;
    long long linkcnt = 0;
    set<int> members;

    // function to add an edge to graph
    void addEdge(int v, int w);

    // DFS traversal of the vertices
    // reachable from v
    void DFS(int v);
};

void Graph::addEdge(int v, int w)
{
    adj[v].push_back(w); // Add w to v’s list.
}

void Graph::DFS(int v)
{
    // Mark the current node as visited and
    // print it
    visited[v] = true;
    members.insert(v);
//    cout << v << " ";

    // Recur for all the vertices adjacent
    // to this vertex
    list<int>::iterator i;
    for (i = adj[v].begin(); i != adj[v].end(); ++i)
    {
        linkcnt++;

        if (!visited[*i]){
            DFS(*i);
        }
    }
}

/******************************** GRAPH END ***************************************/

/*
https://atcoder.jp/contests/abcxxx/tasks/abcxxx_d
*/

int n,m;
Graph gp;

int main()
{
    cin >> n >> m;
    
    for(int i=0; i<m; i++){
        int a,b;
        
        cin >> a >> b;
        
        gp.addEdge(a, b);
        gp.addEdge(b, a);
    }

    long long sum = 0;

    vector<bool> visited(n+1, false);
    for(int i=1; i<=n; i++){
        if (visited[i]){
            continue;
        }
        
        gp.linkcnt = 0;
        gp.members.clear();
        gp.visited.clear();
        
        gp.DFS(i);
        
        long long linkcnt = gp.linkcnt/2;
        long long memcnt = gp.members.size();

//        cout << "linkcnt=" << linkcnt << endl;
//        cout << "memcnt=" << memcnt << endl;

        long long alllink = memcnt*(memcnt-1)/2;

        sum += alllink - linkcnt;
        
        for(auto one: gp.members){
            visited[one] = true;
        }
    }
    
    cout << sum << endl;
    
    return 0;
}

 

标签:int,Graph,void,子图,visited,New,Friends,addEdge
From: https://www.cnblogs.com/lightsong/p/18148396

相关文章

  • newstartweek3部分题解
    64位利用格式化字符串修改got表例题:newstartweek3putorsystem老规矩先checksec和代码审计:看到开了canary和NX(但是对于这道题的话canary是没有用的),然后源码这边也没有发现有system函数,也没有后门函数,所以我们需要自己在libc里面找,然后就有bin/sh那么我们就只用把got表里......
  • 【转载】Java函数式编程——为什么new Thread()中要用函数式编程
    面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,......
  • java使用Workbook workbook = new XSSFWorkbook(inputStream);导出数据频繁GC
    由于xlsx底层使用xml存储,占用内存会比较大,官方也意识到这个问题,在3.8版本之后,提供了SXSSFWorkbook来优化写性能原来代码Workbookworkbook= newXSSFWorkbook(inputStream);优化后代码Workbookworkbook= newSXSSFWorkbook(newXSSFWorkbook(inputStream));此处有坑,请往......
  • New!界面控件DevExpress WinForms v24.1预览版抢先体验
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!在之前的文章中(点击这里回顾>>),我们为大家介绍了DevE......
  • 泛型new()约束
    在C#中,如果你有一个泛型类或方法,且其中需要创建类型T的实例,但是T并没有指定具有无参构造函数(new()约束),那么编译器不会允许你直接使用newT()来创建实例。例如,假设你有以下泛型类:Csharp1publicclassMyClass<T>2{3publicTCreateInstance()4{5//下面这行......
  • 重载全局的new和delete
    重载全局的new和delete::operatornew::operatornew[]->不可以被声明与同一个namespace之内new会执行三个动作:->之前的代码提到:new本身会开辟内存空间.所以声明方法需要一个size_tsize的参数inlinevoid*operatornew(size_tsize){}::operatordelete::......
  • C++动态内存分配/malloc/new
    0前言这部分确实是面试老八股了,不过我还是记录一下1内存分区在C语言中,将内存分为程序代码区+数据区,其中数据区又分为静态存储区和动态存储区在C++中,分为五种:动态存储区:栈区:存放局部变量,由编译器自动分配释放,程序员不能操作堆:由程序员使用malloc/new申请,用free/delete......
  • SystemVerilog -- 2.1 Data Types ~ New Data types
    SystemVeriloglogicandbit在上一篇文章中,概述了主要数据类型。在本会话中,我们将研究4-state和2-state变量以及两种名为logic和bit的新数据类型。4-statedatatypes除了0和1之外,还可以具有未知(X)和高阻态(Z)值的类型称为4态类型。请注意,只能在过程快中驱动,例如,数据类......
  • Object.defineProperty 和new Proxy深度检测
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="width=device......
  • Newman下载安装
    1.安装node.js安装步骤查看已安装版本node-v  2.安装Newman运行命令:npminstall-gnewman,即可完成安装操作。或者npminstall-gnewman--registry=http://registry.npm.taobao.org 检验当前Newman是否安装成功,在dos中输入命令:newman--version windows......