标签:
Description
Input
Output
Sample Input
1 4 10000 3 2 2 8000 3 5000 1000 2 1 4 200#include <stdio.h> #include <vector> #include <algorithm> #include <string.h> #include <math.h> using namespace std; struct node { int price,level; }c[105]; struct node1 { int num,discount; }; vector<node1>edge[105]; int n,m,result; bool vis[105]; int dfs(int x,int sum,int max_level,int min_level) { result=min(result,sum); max_level=max(max_level,c[x].level); min_level=min(min_level,c[x].level); for(int i=0;i<edge[x].size();i++) { node1 temp=edge[x][i]; if(fabs(min_level-c[temp.num].level)<=m&&fabs(max_level-c[temp.num].level)<=m&&!vis[temp.num]) { vis[temp.num]=true; dfs(temp.num,sum+temp.discount+c[temp.num].price-c[x].price, max(max_level,c[x].level),min(min_level,c[x].level)); vis[temp.num]=false; } } } int main() { while(~scanf("%d %d",&m,&n)) { memset(vis,false,sizeof(vis)); memset(edge,0,sizeof(edge)); memset(&c,0,sizeof(&c)); for(int i=1;i<=n;i++) { int x; scanf("%d %d %d",&c[i].price,&c[i].level,&x); for(int j=0;j<x;j++) { node1 temp; scanf("%d %d",&temp.num,&temp.discount); edge[i].push_back(temp); } } result=c[1].price; vis[1]=true; dfs(1,c[1].price,c[1].level,c[1].level); printf("%d\n",result); } return 0; }
3000 2 14 20050 2 0
Sample Output
5250
虽然不知道深搜为什么能过 看到评论区说是数据太弱了。。
大家都是用的dijkstra算法。。。好吧
还有这道题的一个难于理解的地方 也是我犯错的地方 就是这句话 “如果两人地位等级差距超过了M,就不能"间接交易"。
我理解为在两个人交易时 如果两个人的等级差超过M就不能交易 谁知道是所有的交易成员之间都不能超过M。。。。
dfs ac代码:
标签:
原文地址:http://blog.csdn.net/su20145104009/article/details/51387113