CF K. City
https://codeforces.com/gym/103145/problem/K
一开始看到有环,就想着缩点了,但是对于每次询问,如果都建一个新图,必定会TLE
所以采用离线处理的方法,把询问按照由大到小来排序,这样就可以边询问边建图。
可以采用并查集的方法,开个记录每个集合中元素的个数。当两个集合合并时,产生的新数对个数就是两个集合大小之积。
合并的次序很重要,一定要先处理完再去合并:
//这个顺序重要,一定要是先处理完再合并,不要以为fa没影响。
//因为先合并的话,如果某个元素的祖先刚好是自己,那么这个元素就是先跑到了别人家再合并的,大小也是用的别人的大小
最后还要注意加速cin,因为输入的数据量比较大,直接cin会超时QWQ,或者scanf也可以
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int ll
const int maxn=3e5;
int cnt,fa[maxn];
ll ans[maxn],setnum[maxn];struct node{int fr,to,w;
}e[maxn];struct query{int id,d;
}p[maxn];void add(int u,int v,int w){e[++cnt].fr=u;e[cnt].to=v;e[cnt].w=w;
}bool cmp_e(node a,node b){return a.w>b.w;
}bool cmp_q(query a,query b){return a.d>b.d;
}int getfa(int x){return fa[x]==x?x:fa[x]=getfa(fa[x]);
}signed main(){ios::sync_with_stdio(false); //是个指令,所以不能放在头文件里 cin.tie(0);cout.tie(0);int t;cin>>t;while(t--){int n,m,q;cin>>n>>m>>q;cnt=0;for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;add(u,v,w);}for(int i=1;i<=q;i++){cin>>p[i].d;p[i].id=i;}sort(e+1,e+1+cnt,cmp_e);sort(p+1,p+1+q,cmp_q);int k=1;ll sum=0;for(int i=1;i<=n;i++) setnum[i]=1;for(int i=1;i<=q;i++){while(e[k].w>=p[i].d&&k<=cnt){int u=e[k].fr,v=e[k].to;k++;if(getfa(u)!=getfa(v)){
// cout<<"!!"<<getfa(u)<<" "<<fa[u]<<endl;sum+=setnum[fa[v]]*setnum[fa[u]]; setnum[fa[v]]+=setnum[fa[u]]; fa[fa[u]]=fa[v];//这个顺序重要,一定要是先处理完再合并,不要以为fa没影响。//因为先合并的话,如果某个元素的祖先刚好是自己,那么这个元素就是先跑到了别人家再合并的,大小也是用的别人的大小 }}ans[p[i].id]=sum;}for(int i=1;i<=q;i++) cout<<ans[i]<<endl;}return 0;
}
CF K. City相关推荐
- The 15th Chinese Northeast Collegiate Programming Contest K.City
目录 题目: 思路: 代码: 题目: 原题: Lucida occupies n cities connected by m undirected roads, and each roa ...
- CF :K 一个含n条边的带权无向连通图,q次查询,每次查询两点间的最短距离。...
题意:给你一个含n条边的带权无向连通图,q次查询,每次查询两点间的最短距离. 思路:LCA+思维. 设a,b两点间的距离为f(a,b) 则f(a,b)=dis[a]+dis[b]-2*dis[lca( ...
- The 15th Chinese Northeast Collegiate Programming Contest - K.City
虽然不难,但是感觉很有意思的一道题,下面有几个点感觉还是挺妙的: · 并查集只能加边不能减边: ·对数据进行离线处理,方便我们进行排序处理(后面会解释): 首先数据的范围很大,如果我们每做一次判断都要 ...
- 上映 10 天,票房就突破 10 亿的《海王》真的有那么好看?
出品:CSDN(ID:CSDNnews) 写在前面 本文将主要通过Python加上一些数据分析,来证明<海王>好看. <海王>一部电影带你重温<驯龙高手><变 ...
- CodeChef TWOROADS(计算几何+拉格朗日乘数法)
题面 传送门 简要题意:给出\(n\)个点,请求出两条直线,并最小化每个点到离它最近的那条直线的距离的平方和,\(n\leq 100\) orz Shinbokuow 前置芝士 给出\(n\)个点,请 ...
- Cassandra 的数据存储结构——本质是SortedMapRowKey, SortedMapColumnKey, ColumnValue
Cassandra 的数据存储结构 Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型.它借鉴了 Amazon 的 Dynamo 和 Google's BigTab ...
- jquery书写一个简易的二级联动
先用php生成一个json数组示例如下 JSON_UNESCAPED_UNICODE 是对汉字进行处理的参数 然后HTML代码如下 把那个json_city赋值成我们用php生成的json即可 < ...
- 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...
微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...
- Mr. Main and Windmills 模拟,计算几何(昆明)
O(nmlogn)O(nmlogn)O(nmlogn),这么一算都1e8了 long double,但好像double也可以过 #include <iostream> #include & ...
最新文章
- 【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink
- struts 数据库连接
- jquery实现停留半秒后再选择
- 拿到大厂产品经理offer的应届生都是什么水平?
- JAVA调用C语言写的SO文件
- 【C语言简单说】八:分支结构之if...else if()...else...(3)
- LeetCode MySQL 262. 行程和用户
- 视频预训练界的HERO!微软提出视频-语言全表示预训练模型HERO,代码已开源!...
- Linux系统升级维护费,Antergos Linux 宣布停止维护
- django settings 定义的变量不存在_Django基础框架搭建
- AVIator -- Bypass AV tool
- 在自己的项目中调用别人的库的方法(static lib库,dynamic lib库以及dll动态库)
- 手机开热点但是电脑一直连接不上_电脑连接不上手机热点解决办法
- Entrepreneur\'s Credo of the American 美国的企业家宣言
- 【安全问道】系列:阿里带你3分钟掌握一个互联网安全知识
- php数据库redios_PHP开发者应了解的24个库
- Python-Opencv fitLine 拟合直线
- Redis(三)【五大数据类型三种特殊数据类型】
- 蓝牙音频芯片,在交通灯提示语音更换的应用解析,WT2605X
- [OHIF-Viewers]医疗数字阅片-医学影像-Cornerstone Tools