某口 312 周赛 好路径的数目

参考题解。

思路:根据权值从小到大利用并查集建树算方案。

class Solution {
public:
    int numberOfGoodPaths(vector<int>& vals, vector<vector<int>>& edges) {
        int n=vals.size();
        vector<vector<int>> g(n);
        for( vector<int> v:edges ){
            g[v[0]].push_back(v[1]);
            g[v[1]].push_back(v[0]); 
        }
        int id[n],fa[n],siz[n];
        for( int i=0;i<n;i++ ) id[i]=fa[i]=i,siz[i]=1;
        function<int(int)> find = [&](int x)->int{ return fa[x]==x ? x : fa[x]=find(fa[x]); };
        int ans=n;
        sort(id,id+n,[&](int x,int y){ return vals[x]<vals[y]; });
        for(int x:id ){
            int v = vals[x], fx=find(x);
            for( int y:g[x] ){
                y=find(y);
                if( y==fx || vals[y]>v ) continue;
                if(  vals[y]==v ){
                    ans+=siz[y]*siz[fx];
                    siz[fx]+=siz[y];
                }
                fa[y]=fx;
            }
        }
        return ans;
    }
};
全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务