Code 1035 火車停留 最大費用最大流

2021-06-26 07:56:27 字數 1410 閱讀 1280

題目:code 1035 火車停留

題目:中文題目,直接讀吧

分析:讀題之後發現是讓費用最大,不容易考慮到費用流,其實費用最大和最小是一樣的,費用最大的話可以把費用變為負值求最小的。

建圖方法:

超級源點 ss 連線 s ,容量為 n ,費用為0

把每個列車拆成兩個點 i 和 ii ,之間建邊容量為1 ,費用為給車站交的錢的相反數

s 連線 i ,容量inf ,費用0 

ii 連線 t ,容量inf ,費用0

所有時刻末點在初點前面的,列舉建邊,容量為1,費用0

然後求一次費用流,其相反數就是ans

ac**:

#include #include #include #include #include #include #include #include using namespace std;

#define del(a,b) memset(a,b,sizeof(a))

const int inf = 0x3f3f3f3f;

const int n = 220;

struct node

;vectore;

vectorv[n];

int vis[n];

double dis[n];

int p[n],a[n]; //p儲存father,a儲存cap

void clear(int x)

void add_node(int from,int to,int cap,double cost) //shab

); e.push_back((node));

int len = e.size()-1;

v[to].push_back(len);

v[from].push_back(len-1);

}bool bellmanford(int s,int t,int& flow,double& cost)}}

}if(dis[t] == 1000000000)

return false;

flow += a[t];

cost += dis[t]*a[t];

int u = t;

while(u!=s)

return true;

}double min_cost(int s,int t)

struct tree;

tree kf[200];

int main()

for(int i=1;i<=m;i++)

}add_node(ss,s,n,0.0);

double ans = min_cost(ss,t);

printf("%.2lf\n",-ans);

clear(tt);

}return 0;

}

寫Code從讀Code開始

如何讀懂別人的程式碼 1.接觸他人的程式碼,大致上可以分為三種程度 一 了解,二 修改 擴充,三 抽取 提煉,從中獲得我們需要的資訊,或者是擴充功能及維護,又或是得到原作者的程式功力,轉化並加以精煉以求增強自己的程式功力。2.熟悉溝通語言與慣例用語 解程式碼寫成的程式語言。想要讀 懂法文寫成的小說,...

快速排序(code)

package snippet public class fastsort system.out.println 排序前 for int i 0 iout.println a i int start 0 int end a.length 1 sort a,start,end system.out.p...

阿里雲code登入,阿里雲code使用教程

阿里雲code登入,阿里雲code使用教程 最近得知阿里雲code這個牆下神器,於是嘗試看看。乙個比較坑的點是使用者名稱密碼問題,阿里雲code的使用者名稱密碼與登入的帳戶密碼不一致,使用者名稱在 profile 中的username,密碼在password,忘記的可以修改,改完就能用了。完整流程如...