摘要: 如果$g[i][j] != 0$ ,则购买$i$后只需再花费$g[i][j]$购买$j$即可,于是从$i$向$j$连一条边权为$g[i][j]$的边 如果$g[i][j] == 0$,则购买$i$后只能花费$w$购买$j$,于是从$i$向$j$连一条边权为$w$的边 对所有的$i,j∈[1,n]$进 阅读全文
posted @ 2020-09-06 16:44 Dazzling! 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 原题等价于求最后连通块数为k的情况下的最小生成森林,最大边的权值即为所求 \(prim\) prim算法并不是按照边的权值大小顺序依次加入最小生成树,故采用一个小根堆维护出最小生成树的第k大边,剩下k-1个孤立点,连通块数为k 时间复杂度:\(O(n^2)\) const int N=510; do 阅读全文
posted @ 2020-09-06 08:27 Dazzling! 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 已有些边基础上求最小生成树 \(prim\) const int N=1010; double g[N][N]; PDD a[N]; double dist[N]; bool vis[N]; int n,m; double dis(PDD a,PDD b) { return sqrt((a.fi-b 阅读全文
posted @ 2020-09-05 21:46 Dazzling! 阅读(157) 评论(0) 推荐(0) 编辑
摘要: BFS 由于是无向无权图,采用BFS 自环对于最短路无影响 重边和其它边对最短路径数的影响是一样的,不用做特别处理 采用dp思想即可统计出1号点到每个点的最短路径数 BFS 只入队一次,出队一次,可以抽象成拓扑图。 因为它可以保证被更新的点的父节点一定已经是最短距离了,并且这个点的路径数已经更新完成 阅读全文
posted @ 2020-09-05 18:38 Dazzling! 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 单源最短路&单终点最短路 单终点最短路径其实就可以把所有的边反过来,直接就转换为单源最短路径了。 const int N=1010; vector<PII> g[N]; vector<PII> rg[N]; int dist1[N]; int dist2[N]; bool vis[N]; int n 阅读全文
posted @ 2020-09-05 17:37 Dazzling! 阅读(214) 评论(0) 推荐(0) 编辑
摘要: $TLE$代码 const int N=210; vector<PII> g[N]; int tim[N]; int dist[N]; bool vis[N]; int n,m,q; int dijkstra(int st,int ed,int limit) { if(tim[st]>limit | 阅读全文
posted @ 2020-09-05 12:55 Dazzling! 阅读(179) 评论(0) 推荐(0) 编辑
摘要: map const int N=2e5+10; unordered_map<int,int> mp; int n,m; int main() { cin>>n; for(int i=1;i<=n;i++) { int x; cin>>x; mp[x]=i; } cin>>m; while(m--) 阅读全文
posted @ 2020-09-05 08:20 Dazzling! 阅读(159) 评论(0) 推荐(0) 编辑
摘要: my solution 将$A-B=C$转换成$A=B+C$,a数组记录A的值,b数组记录B+C的值 问题转化为a,b数组中相等的数的配对数 t为当前配对的数,l记录当前a数组中配对数的个数,r记录b数组中配对数的个数 根据乘法原理,res每次加上$l*r$ const int N=2e5+10; 阅读全文
posted @ 2020-09-04 21:10 Dazzling! 阅读(191) 评论(0) 推荐(0) 编辑
摘要: $map$模板题 unordered_map<string,int> mp; int n; int main() { cin>>n; for(int i=0;i<n;i++) { int op; string name; int score; cin>>op; if(op == 1) { cin>> 阅读全文
posted @ 2020-09-03 19:09 Dazzling! 阅读(227) 评论(0) 推荐(0) 编辑
摘要: $set$模板题 set<int> s; int n; int main() { cin>>n; for(int i=0;i<n;i++) { int op,x; cin>>op>>x; if(op == 1) { if(s.count(x)) puts("Already Exist"); else 阅读全文
posted @ 2020-09-02 22:56 Dazzling! 阅读(184) 评论(0) 推荐(0) 编辑