zoukankan      html  css  js  c++  java
  • ZJOI2006 物流运输

    是最短路+动规的题型!

    和codevs 1403是一样的,还要简单一些

    主要不同的是没有加最开始的方案改变花费

      1 #include<cstdio>
      2 #include<iostream>
      3 #include<cstring>
      4 #include<algorithm>
      5 #include<queue>
      6 #define re register
      7 #define llint long long
      8 #define wl putchar('
    ')
      9 #define read1(a) scanf("%d",&a)
     10 #define De(a) cout<<a<<endl
     11 using namespace std;
     12 const int inf = 0x3f3f3f3f;
     13 struct edge{
     14     int v,nxt,w;
     15 }e[10086<<1];
     16 int h[105],tot;
     17 inline void add(int x,int y,int w)
     18 {
     19     tot++,
     20     e[tot].v=y,
     21     e[tot].w=w,
     22     e[tot].nxt=h[x],
     23     h[x]=tot;
     24 }
     25 int ban[105][50];//第i天第j个点是否可用
     26 int T,n,K,m;//n点m边 
     27 llint cost[100][100];
     28 llint dp[100];
     29 
     30 llint dis[105];
     31 int vis[105];
     32 priority_queue < pair<int,int> > q;
     33 
     34 inline llint dijkstra(int t1,int t2)
     35 {
     36     for(int i=1;i<=n;i++)
     37     {
     38         dis[i]=inf,vis[i]=0;
     39     }
     40     for(int t=t1;t<=t2;t++)
     41     {
     42         for(int i=1;i<=n;i++)
     43         {
     44             if(ban[t][i]) vis[i]=1;
     45         }
     46     }
     47     dis[1]=0;
     48     q.push(make_pair(-0,1));
     49     while(!q.empty())
     50     {
     51         int x=q.top().second;
     52         q.pop();
     53         if(vis[x]) continue;
     54         vis[x]=1;
     55         for(int i=h[x];i;i=e[i].nxt)
     56         {
     57             int v=e[i].v,w=e[i].w;
     58             if(dis[v]>dis[x]+w && )
     59             {
     60                 dis[v]=dis[x]+w,
     61                 q.push(make_pair(-dis[v],v));
     62             }
     63         }
     64     }
     65     return dis[n];
     66 }
     67 
     68 
     69 int qq;
     70 int a,b,c;
     71 int main()
     72 {
     73     scanf("%d%d%d%d",&T,&n,&K,&m);
     74     for(int i=1;i<=m;i++)
     75     {
     76         scanf("%d%d%d",&a,&b,&c);
     77         add(a,b,c),add(b,a,c);
     78     }
     79     scanf("%d",&qq);
     80     for(int i=1;i<=qq;i++)
     81     {
     82         scanf("%d%d%d",&c,&a,&b);
     83         for(int j=a;j<=b;j++)
     84         {
     85             ban[j][c]=1;//ab范围内点c不可用 
     86         }
     87     }
     88     
     89     for(int i=1;i<=T;i++)
     90     {
     91         for(int j=i;j<=T;j++)
     92         {
     93             cost[i][j]=dijkstra(i,j);//cost表示从i到j天若不改变方案 的最短路 
     94         }
     95     }
     96     
     97     for(int i=1;i<=T;i++)
     98     {
     99         dp[i]=cost[1][i]*i;//初始化为从未改变方案的花费,这里忘了乘i 改半天 
    100         for(int j=1;j<i;j++)
    101         {
    102             if(cost[j+1][i]!=inf)
    103                 dp[i]=min(dp[i],dp[j]+cost[j+1][i]*(i-j)+K);//从j天转移过来,第j+1到i天都在使用新的方案,故+K 
    104         }
    105     }
    106     printf("%lld",dp[T]);
    107     
    108 }
  • 相关阅读:
    [svc]二三层数据格式&&三层数据如何匹配路由
    [na][dhcp]dhcp细枝末节&dhcp防攻
    [docker]使用quaaga实现(rip ospf)实现主机间容器互通
    [svc]centos7安装优化最佳姿势
    [svc]gns3模拟器及探讨几个bgp问题
    [svc]ip routing和no ip routing
    [docker]macvlan实现双vlan互通
    Jmeter 日志设置---如何设置java协议中被测jar的日志?
    Jmeter java协议配置文件导入
    eclipse, Log4j配置(真心的详细~)
  • 原文地址:https://www.cnblogs.com/tythen/p/10052859.html
Copyright © 2011-2022 走看看