a1220. 複雜的大門(陳許旻)
時間限制:
1.0s 記憶體限制:
512.0mb
總提交次數:
132ac次數:
74 平均分:
67.84
試題**
2011中國國家集訓隊命題答辯
問題描述
你去找某bm玩,到了門口才發現要開啟他家的大門不是一件容易的事……
他家的大門外有n個站台,用1到n的正整數編號。你需要對每個站台訪問一定次數以後大門才能開啟。站台之間有m個單向的傳送門,通過傳送門到達另乙個站台不需要花費任何代價。而如果不通過傳送門,你就需要乘坐公共汽車,並花費1單位的錢。值得慶幸的是,任意兩個站台之間都有公共汽車直達。
現在給你每個站台必須訪問的次數f
i,對於站台i,你必須恰好訪問f
i次(不能超過)。
我們用u、v、w三個引數描述乙個傳送門,表示從站台u到站台v有乙個最多可以使用w次的傳送門(不一定要使用w次)。值得注意的是,對於任意一對傳送門(u
1,v1)和(u
2,v2),如果有u
12,則有v
1≤v2;如果有v
12,則有u
1≤u2;且u
1=u2和v
1=v2不同時成立。
你可以從任意的站台開始,從任意的站台結束。出發去開始的站台需要花費1單位的錢。你需要求出開啟大門最少需要花費多少單位的錢。
輸入格式
第一行包含兩個正整數n、m,意義見題目描述。
第二行包含n個正整數,第i個數表示f
i。接下來有m行,每行有三個正整數u、v、w,表示從u到v有乙個可以使用w次的傳送門。
輸出格式
輸出一行乙個整數,表示開啟大門最少花費的錢數。
樣例輸入
4 35 5 5 5
1 2 1
3 2 1
3 4 1
樣例輸出 17
資料規模及約定
有20%的資料滿足n≤10,m≤50;對於所有的w、f
i,滿足1≤w,f
i≤10。有50%的資料滿足n≤1000,m≤10000。100%的資料滿足1≤n≤10000,1≤m≤100000;對於所有的u、v,滿足1≤u,v≤n,u≠v;對於所有的w、f
i,滿足1≤w,f
i≤50000。
以上的每類資料中都存在50%的資料滿足對於所有的w、f
i,有w=f
i=1。
時限1s
題解:此題是一道網路流的題目。輸出開啟大門最少花費的錢數實際上就是求總的經過的數目-最大使用傳送門的次數,而最多使用傳送門的次數可以用最大流來求解。
首先拆點,把每個點拆成起點和終點,然後從源點向所有的起點連邊,權值為該點所需要的經過次數,然後從終點向匯點連邊,權值為該點所需要的經過次數,然後處理傳送門的資訊,傳送門的起點向終點連邊,權值為傳送門最大使用的次數。這樣就可以跑最大流啦。因為是二分圖,所有果斷選擇dinic。
#include#include#include#include#includeusing namespace std;
int n,m,i,j,f[10003],sum=0;
int tot,next[400003],point[30000],v[400003],remain[400003];
int deep[30000],cur[30000];
const int inf=1e9;
void add(int x,int y,int z)
bool bfs(int s,int t)
}if (deep[t]>inf) return false;
else return true;
}int dfs(int now ,int t,int limit)
}return flow;
}int dinic(int s,int t)
int main()
for (i=1;i<=m;i++)
printf("%d",sum-dinic(0,2*n+1));
}
uva1220樹的最大獨立集
題意 公司裡除了老闆,每個人都有乙個直屬上司,要求選盡量多的人,但不能同時選乙個人和他的直屬上司,問最多能選多少個人,以及在人數最多的情況下方案是否唯一。思路 d u 0 表示不選u點能得到的最大人數d u 0 sum d u 1 表示選u點能得到的最大人數d u 1 sum f u 0 表示不選u...
12 20 對王建民老師的評價 個人期末總結
對王建民老師的評價 個人期末總結 今天進行了最後一次大考,大考題目為房產資訊管理系統。其中又三位角色,各自實現不同的功能。大概耗時5個小時將其全部完善!可能有點長了哈!但是每次寫新的題目都會遇到一些小問題,小 bug,當然這次也是不例外。所以花費的時間有些長!王建民老師可以說是我從小到現在所有老師中...
複雜的宣告
int a 整型變數 int a 整型指標變數 int a 整型指標的指標變數 int a 10 整型陣列 int a 10 整型指標陣列 int a 10 陣列指標變數 int a int 函式指標變數 int a 10 int 函式指標陣列 int fp1 int 10 fp1 函式指標變數,指...