make_pair的用法以及替代make_pair的结构体以及广度优先搜索
来源:互联网 发布:淘宝食品店铺装修 编辑:程序博客网 时间:2024/06/08 10:29
中文题意:就是一个杀手要追上一个亡命之徒要走多远以及为此付出的代价。
Chandan is a horrendous murderer and he wants to kill Arjit just because he's lazy. Chandan is following the trail of Arjit's shoes. The trail is in the form of a k-ary tree. Arjit is lazy, sure, but he's smart. Initially, Arjit and Chandan are standing together, but Arjit magically moves away from Chandan as far as he can go.
Chandan doesn't know the way out, but he knows that Arjit has managed to travel the maximum distance he can. Help Chandan find out the maximum distance he would have to travel to find Arjit. And also tell him how much will he have to pay to travel so far. The travel rates are:
- If maximum distance is <100, cost = 0.
- If maximum distance is > 100, cost = 100.
- If maximum distance is > 1000, cost = 1000.
- If maximum distance is > 10000, cost = 10000.
Input format:
First line contains the total number of test cases. Then, the next line contains the number of nodes. The the next n-1 lines contain three integers - the first two denote an edge between a and b, the third integer denotes the weight of that edge.
Output format:
You've to print the money Chandan will pay and the maximum distance he will have to travel.
Constraints:
1 <= Test Cases <= 10
2 <= n <= 100000
1 <= a, b <= n
1 <= weight <= 100
151 2 43 2 32 5 24 1 1
解题方法一:用结构体代替make_pair
#include<bits/stdc++.h>
using namespace std;#define all(v) v.begin(),v.end()#define read(a) freopen("a.txt","r",stdin)#define write(b) freopen("b.txt","w",stdout)#define min3(a,b,c) min(a,min(b,c))#define max3(a,b,c) max(a,max(b,c))#define min4(a,b,c,d) min(min(a,b),min(c,d))#define max4(a,b,c,d) max(max(a,b),max(c,d))#define maxall(v) *max_element(all(v))#define minall(v) *min_element(all(v))#define pb push_back#define mk make_pair#define REV(x) reverse(x.begin(),x.end())#define SORT(v) sort(all(v))#define UN(v) SORT(v), (v).earse(unique(all(v)),v.end())#define common(a,b) SORT(a), SORT(b), a.erase(set_intersection(all(a),all(b),a.begin()),a.end())#define uncommon(a,b) SORT(a), SORT(b), a.erase(set_symmetric_difference(all(a),all(b),a.begin()),a.end())#define FILL(a,d) memset(a,d,sizeof(a))#define LL long long#define PI 2*acos(0.0)#define pi pair<int,int>#define MAXM 2147483647#define MAXML 9223372036854775807LL#define MODM 1000000007int binarySearch(vector < int > arr, int l, int r, int x) { while (l <= r){int m = l + (r-l)/2; if (arr[m] == x) return m; if (arr[m] < x) l = m + 1; else r = m - 1; return -1; }}LL gcd(LL a, LL b){if(a==0)return(b);else return(gcd(b%a,a));}LL fastpow(LL a, LL n, LL temp){if(n==0) return(1);if(n==1)return((a*temp)%MODM); if(n&1)temp=(temp*a)%MODM;return(fastpow((a*a)%MODM,n/2,temp));}int dist[100001];int visited[100001];int n, tme;struct node {int i,d;};typedef struct node node;vector<node> v[100001];int bfs (int start) {queue<int> q;q.push(start);for(int i=0;i<=n;i++){visited[i]=0;dist[i]=0;}visited[start]=1;while(!q.empty()){int temp = q.front();q.pop();for(int i=0;i<(int)v[temp].size();i++){if(visited[v[temp][i].i]==0){visited[v[temp][i].i]=1;dist[v[temp][i].i]+=dist[temp]+v[temp][i].d;q.push(v[temp][i].i);}}}return int(max_element(dist+1,dist+n+1)-dist);}int main() {int u1,v1,d;node temp;int tc;scanf("%d",&tc);while(tc--){scanf("%d",&n);for(int i=1;i<=n;i++) {v[i].clear();}for(int i=1;i<=n-1;i++) {scanf("%d%d%d",&u1,&v1,&d);temp.i = v1;temp.d = d;v[u1].push_back(temp);temp.i = u1;v[v1].push_back(temp);}int start = bfs(1);int ans = bfs(start);int finalans = dist[ans];int money = 0;if (finalans>100)money = 100;if (finalans>1000)money = 1000;if (finalans>10000)money = 10000;printf("%d %d\n",money,finalans);}return 0;}第二张方法:STL中的make_pair方法,今天通过这道题总算有点会了,开心,今天没白过
#include<bits/stdc++.h>using namespace std;#define ll long long int vector< pair<ll,ll> >graph[100009];bool visit[100009];ll dis[100009]; void dfs(ll u){ ll v,i,w; visit[u]=true; for(i=0;i<graph[u].size();i++) { v=graph[u][i].first; w=graph[u][i].second; if(!visit[v]) { dis[v]=dis[u]+w; dfs(v); } }} int main(){ ll T,t,n,a,b,c,i,maxi; scanf("%lld",&T); for(t=1;t<=T;t++) { scanf("%lld",&n); for(i=0;i<=n;i++) graph[i].clear(); for(i=1;i<n;i++) { scanf("%lld %lld %lld",&a,&b,&c); graph[a].push_back(make_pair(b,c)); graph[b].push_back(make_pair(a,c)); } memset(visit,false,sizeof visit); memset(dis,0,sizeof dis); dfs(1); maxi=0; a=0; for(i=1;i<=n;i++) { if(dis[i]>maxi) { maxi=dis[i]; a=i; } } memset(visit,false,sizeof visit); memset(dis,0,sizeof dis); dfs(a); maxi=0; a=0; for(i=1;i<=n;i++) { if(dis[i]>maxi) { maxi=dis[i]; a=i; } } if(maxi>10000) a=10000; else if(maxi>1000) a=1000; else if(maxi>100) a=100; else a=0; printf("%lld %lld\n",a,maxi); } return 0;}
- make_pair的用法以及替代make_pair的结构体以及广度优先搜索
- Pair的使用,以及typedef的使用,make_pair的使用
- pair 和make_pair比较,以及在map中的用法
- make_pair()
- make_pair
- make_pair
- make_pair
- make_pair
- make_pair
- make_pair
- make_pair
- stl map用法和make_pair函数和pair结构体
- 一个STL的函数make_pair()
- pair和make_pair的使用
- pairs和make_pair的使用
- 树的存储结构和图的存储结构以及图的深度优先DFS搜索和BFS广度优先搜索
- 图的 深度优先搜索(DFS) 以及 广度优先搜索(BFS)
- 【图的实现】“广度优先搜索遍历”以及“深度优先搜索遍历”必会
- iscsi
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 模板类与友元函数:关于LNK1120和LNK2019报错
- 马未都谈教育
- 一只程序猿的养成日记 第一章 第六节 栈帧结构
- make_pair的用法以及替代make_pair的结构体以及广度优先搜索
- Spring的ioc入门案例
- 38 Three.js高级材质THREE.ShaderMaterial
- String和StringBuffer
- 1040. 有几个PAT(25)
- redis学习笔记二(常规操作)
- 数据结构实验之图论八:欧拉回路
- 正在进行的激光雷达“世界大战”中,Axetomahawk先行一步
- 12月6日