(C++)白俊14621私だけじゃダメな恋


質問と回答


https://www.acmicpc.net/problem/14621
最小生成ツリー
  • の任意のノードから、低コスト順に並べられた優先キューを介してdfsにナビゲートします.
  • ループは作成されず、ブラウズされたノードはブラウズされません.
  • 題の条件に基づいて,同一性別ノードを検索しない条件を追加した.
  • コード#コード#

    #include <iostream>
    #include <vector>
    #include <queue>
    using namespace std;
    
    int N, M;
    
    char node[1005];
    bool isvisited[1005];
    vector<pair<int,int>> edge[1005];
    int a,b,c;
    
    int main(){
    
        ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    
        cin>>N>>M;
    
        for(int k=1; k<=N; k++) cin>>node[k];
    
        for(int i=0; i<M; i++) {
            cin>>a>>b>>c;
            edge[a].emplace_back(c,b);
            edge[b].emplace_back(c,a);
        }
    
    
        priority_queue<pair<int, int>> pq;
        int ans=0;
        pq.push({0,1});
    
        while(!pq.empty()){
    
            int now = pq.top().second;
            int cost = pq.top().first*(-1);
            pq.pop();
    
            if(isvisited[now]) continue;
            isvisited[now]=true;
            ans+=cost;
    
            for(int i=0; i<edge[now].size(); i++){
                int next = edge[now][i].second;
                int nextCost = edge[now][i].first;
    
                if(node[next]==node[now]) continue;
                pq.push({-nextCost, next});
            }
        }
    
        for(int i=1; i<=N; i++) if(!isvisited[i]) {cout<<"-1"; return 0 ;}
        cout<<ans;
    
    }