zoukankan      html  css  js  c++  java
  • 2017冬季24集训模拟-1.寻找幽灵

    ————————————————————————————————————————————题解

    把最短路处理出来然后做背包

    没有把head数组和all初始化qwq

     1 #include <iostream>
     2 #include <queue>
     3 #include <set>
     4 #include <cstdio>
     5 #include <cstring>
     6 #include <vector>
     7 #include <algorithm>
     8 #define siji(i,x,y) for(int i=x;i<=y;++i)
     9 #define gongzi(j,x,y) for(int j=x;j>=y;--j)
    10 #define xiaosiji(i,x,y) for(int i=x;i<y;++i)
    11 #define sigongzi(j,x,y) for(int j=x;j>y;--j)
    12 #define ivorysi
    13 #define inf 0x5f5f5f5f
    14 #define mo 97797977
    15 #define ha 974711
    16 #define ba 47
    17 #define fi first
    18 #define se second
    19 #define pii pair<int,int>
    20 typedef long long ll;
    21 using namespace std;
    22 struct node {
    23     int to,next,val;
    24 }edge[20005];
    25 int head[105],sumedge;
    26 int n,m,num[105],all,T,ans;
    27 int dist[105],f[20005],vis[105];
    28 void add(int u,int v,int c) {
    29     edge[++sumedge].to=v;
    30     edge[sumedge].next=head[u];
    31     edge[sumedge].val=c;
    32     head[u]=sumedge;
    33 }
    34 void spfa(int u) {
    35     vis[u]=1;
    36     for(int i=head[u];i;i=edge[i].next) {
    37         int v=edge[i].to,w=edge[i].val;
    38         if(dist[u]+w < dist[v]) {
    39             dist[v]=dist[u]+w;
    40             if(!vis[v]) {
    41                 spfa(v);
    42             }
    43         }
    44     }
    45     vis[u]=0;
    46 }
    47 void init() {
    48     scanf("%d%d",&n,&m);
    49     int u,v,w;
    50     sumedge=0;
    51     memset(head,0,sizeof(head));
    52     all=0;
    53     siji(i,1,m) {
    54         scanf("%d%d%d",&u,&v,&w);
    55         ++u,++v;
    56         add(u,v,w);
    57         add(v,u,w);
    58     }
    59     siji(i,2,n+1) {scanf("%d",&num[i]);all+=num[i];}
    60     dist[1]=0;
    61     siji(i,2,n+1) dist[i]=inf;
    62     spfa(1);
    63     f[0]=0;
    64     siji(i,1,all) f[i]=inf;
    65     ans=inf;
    66 }
    67 void solve() {
    68     scanf("%d",&T);
    69     while(T--) {
    70         init();
    71         siji(i,2,n+1) {
    72             if(dist[i]>=inf) continue;
    73             gongzi(j,all,num[i]) {
    74                 if(f[j-num[i]] < f[j]-dist[i]) {
    75                     f[j]=f[j-num[i]]+dist[i];
    76                 }
    77             }
    78         }
    79         int half=all/2+1;
    80         siji(i,half,all) {
    81             if(ans>f[i]) ans=f[i];
    82         }
    83         if(ans>=inf) puts("impossible");
    84         else printf("%d
    ",ans);
    85     }
    86 }
    87 int main(int argc, char const *argv[])
    88 {
    89 #ifdef ivorysi
    90     freopen("release.in","r",stdin);
    91     freopen("release.out","w",stdout);
    92 #else
    93     freopen("f1.in","r",stdin);
    94 #endif
    95     solve();
    96     return 0;
    97 }
  • 相关阅读:
    ionic localstorage
    angular 中文鏈接
    把jqmobi 變成jQuery 的插件 從此使用jQuery
    jqmobi 的一些設置
    ionic ngcordova map 地圖
    ionic pull to refresh 下拉更新頁面
    json 對象的序列化
    鍵盤彈出,頁面佈局被推上去了.....
    Cordova V3.0.0中config.xml配置文件的iOS Configuration
    android ios 只能輸入數字 不能輸入小數點的 函數 cordova
  • 原文地址:https://www.cnblogs.com/ivorysi/p/6395294.html
Copyright © 2011-2022 走看看