思路:最短路求出到每个点的最小代价,然后01背包,求出某一代价所能拿到的最大价值,然后搜索最后结果。

代码:

#include<cstdio>
#include<set>
#include<cmath>
#include<stack>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = +;
const int INF = 0x3f3f3f3f;
int lowcost[maxn],cost[maxn][maxn];
int dp[],power[maxn];
bool vis[maxn];
int n,m;
void Dijkstra(int st){
for(int i = ;i <= n;i++){
lowcost[i] = cost[][i];
vis[i] = false;
}
lowcost[st] = ;
for(int i = ;i < n;i++){
int k = -,MIN = INF;
for(int j = ;j <= n;j++){
if(!vis[j] && lowcost[j] < MIN){
MIN = lowcost[j];
k = j;
}
}
if(k == -) break;
vis[k] = true;
for(int j = ;j <= n;j++){
if(!vis[j] && lowcost[j] > lowcost[k] + cost[k][j]){
lowcost[j] = lowcost[k] + cost[k][j];
}
}
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
memset(cost,INF,sizeof(cost));
scanf("%d%d",&n,&m);
while(m--){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
cost[u][v] = cost[v][u] = min(cost[u][v],w);
}
for(int i = ;i <= n;i++)
scanf("%d",&power[i]);
int st = ;
for(int i = ;i <= n;i++){
st += power[i];
}
st = st / + ; Dijkstra();
int ALL = ;
for(int i = ;i <= n;i++){
if(lowcost[i] != INF)
ALL += lowcost[i];
}
memset(dp,,sizeof(dp));
for(int i = ;i <= n;i++){
if(lowcost[i] == INF) continue;
for(int j = ALL;j >= lowcost[i];j--){
dp[j] = max(dp[j],dp[j - lowcost[i]] + power[i]);
}
}
int Min = -;
for(int i = ;i <= ALL;i++){
if(dp[i] >= st){
Min = i;
break;
}
}
if(Min != -) printf("%d\n",Min);
else printf("impossible\n");
}
return ;
}

最新文章

  1. float4与half4数据类型
  2. allocation size overflow
  3. 大叔也说Xamarin~Android篇~调用远程API接口,发POST请求
  4. Maven 库
  5. Bootstrap系列 -- 35. 按钮的向下向上三角形
  6. ViewBag、ViewData和TempData的使用和区别
  7. linux两台服务无密通信
  8. 设计模式 - 观察者模式(Observer Pattern) 详细说明
  9. Delphi控件的透明与不透明(要挨个解释一下原因),对InvalidateControl的关键理解
  10. 在ProgressBar上加文字----显示百分比的进度条
  11. IIS判断W3WP进程对应哪个网站
  12. ArrayList源码解析(四)
  13. Adaboost的意义
  14. JS数组映射详解
  15. [UE4]瞬移前后屏幕亮度变化,Get Player Camera Manager.Start Camera Fade
  16. Java判断不为空的工具类总结
  17. rod cutting
  18. 网页制作中规范使用DIV+CSS命名规则,可以改善优化功效特别是团队合作时候可以提供合作制作效率,具体DIV CSS命名规则CSS命名大全内容如下:
  19. quartz-job实现实时或定时发送短信任务
  20. shell脚本实现分日志级别输出

热门文章

  1. Chrome浏览器下CSS字体大小设置小于12px无效问题
  2. Struts2中的OGNL详解 《转》
  3. jhipser微服务架构介绍
  4. 模拟退火算法(run away poj1379)
  5. oracle日常函数汇总(转载)
  6. Phpstorm 无法自动断点 Exception
  7. 沈阳网络赛J-Ka Chang【分块】【树状数组】【dfs序】
  8. Oracle管理监控之Oracle数据库存储空间监控
  9. Android中的Apk的加固(加壳)原理解析和实现(转)
  10. State of the official Elasticsearch Java clients