码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 893C Rumor 前向星+dfs

时间:2017-11-26 11:20:10      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:node   void   struct   ext   c++   oid   ems   lock   include   

893C Rumor

思路:

前向星+DFS

代码:

#include <bits/stdc++.h>
using namespace std;
#define _for(i,a,b) for(int i=(a); i<(b); ++i)
#define _rep(i,a,b) for(int i=(a); i<=(b); ++i)
typedef long long ll;
const ll maxn = 100005;
const ll maxm = 200005;
struct node {
    int to,next;
} edges[maxm];
int n,m,u,v,cnt=0,head[maxn],vis[maxn];
ll w[maxn],minvalue,sum;
void add(int u, int v) {
    edges[cnt].to=v;
    edges[cnt].next=head[u];
    head[u]=cnt++;
}
void dfs(int s) {
    int t;
    for(int i=head[s]; i!=-1; i=edges[i].next) {
        t=edges[i].to;
        if(!vis[t]) {
            vis[t]=1;
            minvalue=min(minvalue,w[t]);
            dfs(t);
        }
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    memset(head,-1,sizeof(head));
    cin>>n>>m;
    _rep(i,1,n) cin>>w[i];
    _rep(i,1,m) {
        cin>>u>>v;
        add(u,v);
        add(v,u);
    }
    sum=0;
    _rep(i,1,n) {
        if(vis[i]) continue;
        minvalue=w[i];
        vis[i]=1;
        dfs(i);
        sum+=minvalue;
    }
    cout<<sum<<endl;
    return 0;
}

codeforces 893C Rumor 前向星+dfs

标签:node   void   struct   ext   c++   oid   ems   lock   include   

原文地址:http://www.cnblogs.com/lemonbiscuit/p/7897200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!