第十五次CCF-CSP认证(含C++源码)
第十五次CCF-CSP认证
- 小明上学
- 满分思路
- 数据中心
- 满分思路
- 小明放学
- 满分题解
小明上学
题目链接
满分思路
其实题目看着长,但是做起来是非常好写的,其实主要原因在于,他的红绿灯的变化规律是一定的,而且小明路上的每次红绿灯情况都给你了,所以…《凌驾》
#include <iostream>
using namespace std;
int main()
{int r, y , g;//记录三种灯的时间cin >> r >> y >>g;int res = 0;//总耗时int T;cin >> T;while(T--){int flag, time;//各个情况cin >> flag >> time;switch (flag){case 0 ://直接通过res += time;continue;case 1://等待剩余时间后通过res += time;continue;case 2://:等待剩余时间后,再等个红灯通过res =res + time + r;continue;}}cout << res;return 0;
}
数据中心
题目链接
样例:
满分思路
并查集的讲解
#include<iostream>
#include <algorithm>
using namespace std;
const int N = 5e4+10,M=1e5+10;
int n,m,root,v,u,t,res; // n是点数,m是边数
int p[N]; // 并查集的父节点数组struct Edge // 存储边
{int a, b, w;bool operator< (const Edge &W)const{return w < W.w;}
}edges[M];int find(int x) // 并查集核心操作
{if (p[x] != x) p[x] = find(p[x]);return p[x];
}int kruskal()
{sort(edges, edges + m);for (int i = 1; i <= n; i ++ ) p[i] = i; // 初始化并查集int res = 0;for (int i = 0; i < m; i ++ ){int a = edges[i].a, b = edges[i].b, w = edges[i].w;a = find(a), b = find(b);if (a != b) // 如果两个连通块不连通,则将这两个连通块合并{p[a] = b;res = w;}}return res;
}signed main(){cin>>n>>m>>root;for(int i=0;i<m;i++){cin>>v>>u>>t;edges[i]={v,u,t};}cout<<kruskal();return 0;
}
小明放学
os:什么小明,李华给 lz gun 远一点
题目链接
样例: