zoukankan      html  css  js  c++  java
  • P2053-[SCOI2007]修车

      1 #include<bits/stdc++.h>
      2 #define _for(i,a,b) for(register int i = (a);i < b;i ++)
      3 #define _rep(i,a,b) for(register int i = (a);i > b;i --)
      4 #define INF 0x3f3f3f3f
      5 #define MOD 100000000
      6 #define maxn 100003
      7 #define pb push_back
      8 #define debug() printf("Miku Check OK!
    ")
      9 typedef long long ll;
     10 
     11 using namespace std;
     12 typedef pair<int,int> P;
     13 inline ll read()
     14 {
     15     ll ans = 0;
     16     char ch = getchar(), last = ' ';
     17     while(!isdigit(ch)) last = ch, ch = getchar();
     18     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
     19     if(last == '-') ans = -ans;
     20     return ans;
     21 }
     22 inline void write(ll x)
     23 {
     24     if(x < 0) x = -x, putchar('-');
     25     if(x >= 10) write(x / 10);
     26     putchar(x % 10 + '0');
     27 }
     28 int ver[maxn],Next[maxn],head[maxn],val[maxn],cost[maxn];
     29 //incf[i]为i在此趟BFS流过的流量
     30 int vis[maxn],incf[maxn],pre[maxn];
     31 int n,m,s,t,tot,maxflow,ans;
     32 int d[maxn];
     33 void add(int x,int y,int w,int c)
     34 {
     35     ver[++tot] = y,Next[tot] = head[x],head[x] = tot,val[tot] = w,cost[tot] = c;
     36     ver[++tot] = x,Next[tot] = head[y],head[y] = tot,val[tot] = 0,cost[tot] = -c;
     37 }
     38 bool spfa()
     39 {
     40     memset(vis,0,sizeof(vis));
     41     memset(d,0x3f,sizeof(d));
     42     queue<int> q;
     43     q.push(s);
     44     vis[s] = 1;
     45     d[s] = 0;
     46     incf[s] = INF;
     47     while(!q.empty())
     48     {
     49         int x = q.front();
     50         q.pop();
     51         vis[x] = 0;
     52         for(int i = head[x]; i; i = Next[i])
     53             if(val[i])
     54             {
     55                 int y = ver[i];
     56                 if(d[y] > d[x] + cost[i])
     57                 {
     58                     d[y] = d[x] + cost[i];
     59                     incf[y] = min(incf[x],val[i]);
     60                     pre[y] = i;
     61                     if(!vis[y])
     62                         vis[y] = 1,q.push(y);
     63                 }
     64             }
     65     }
     66     if(d[t]==INF)
     67         return false;
     68     return true;
     69 }
     70 void update()
     71 {
     72     int x = t;
     73     while(x != s)
     74     {
     75         int i = pre[x];
     76         val[i] -= incf[t];
     77         val[i^1] += incf[t];
     78         x = ver[i^1];
     79     }
     80     maxflow += incf[t];
     81     ans += d[t] * incf[t];
     82 }
     83 int main()
     84 {
     85     m = read();
     86     n = read();
     87     s = 0;
     88     t = 3939;
     89     tot = 1;
     90     maxflow = 0;
     91     _for(i,1,n+1)
     92         add(s,i,1,0);
     93     _for(i,n+1,n*(m+1)+1)
     94         add(i,t,1,0);
     95     _for(i,1,n+1)
     96     {
     97         _for(j,1,m+1)
     98         {
     99             int c = read();
    100             _for(k,1,n+1)
    101                 add(i,j*n+k,1,k*c);
    102         }
    103     }
    104     while(spfa()) update();
    105     printf("%.2f",double(double(ans)/double(n)));
    106     return 0;
    107 }
  • 相关阅读:
    前端-浅谈Flex布局
    css-渐变简约的登录设计
    小程序-小程序后台原生图片识别
    小程序-云数据库实现好看的上传文件动态
    小程序-利用云开发操作云数据库实现点赞评论案例
    小程序-云存储实现对文件的上传下载
    小程序-浅谈云函数获取数据和云数据库api获取数据的区别
    小程序-简易加法教你如何使用云函数
    小程序-云数据库的add,get,remove,update
    小程序-你不得不知的Promise封装请求
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11661632.html
Copyright © 2011-2022 走看看