bzoj1877
裸的費用流。。拆點就好了
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<cmath> 5 #include<ctime> 6 #include<cstdlib> 7 #include<algorithm> 8 #include<vector> 9 #include<queue> 10 #define rep(i,l,r) for(int i=l;i<(r);i++) 11 #define Rep(i,l,k) rep(i,l,e[k].size()) 12 #define clr(a,x) memset(a,x,sizeof(a)) 13 typedef long long ll; 14 using namespace std; 15 struct edge{ 16 int v,w,c; 17 }; 18 struct Ans{ 19 int flow,cost; 20 }; 21 const int maxn=1009,maxm=100009,inf=0x3fffffff; 22 int s,t,n,m,cnt=0,d[maxn],a[maxn],b[maxn]; 23 bool p[maxn]; 24 edge E[maxm]; 25 vector<int>e[maxn]; 26 void addedge(int u,int v,int w,int c){ 27 edge ed; 28 ed.v=v;ed.w=w;ed.c=c; 29 e[u].push_back(cnt);E[cnt++]=ed; 30 ed.v=u;ed.w=0;ed.c=-c; 31 e[v].push_back(cnt);E[cnt++]=ed; 32 } 33 bool spfa(){ 34 queue<int>Q; 35 clr(p,0);p[s]=1; 36 Q.push(s); 37 rep(i,1,n<<1|1) d[i]=inf; 38 d[s]=0; 39 a[s]=inf; 40 while(!Q.empty()){ 41 int x=Q.front();Q.pop();p[x]=0; 42 Rep(i,0,x){ 43 edge ed=E[e[x][i]]; 44 if(ed.w&&d[ed.v]>d[x]+ed.c){ 45 d[ed.v]=d[x]+ed.c; 46 a[ed.v]=min(a[x],ed.w); 47 b[ed.v]=e[x][i]; 48 if(!p[ed.v]){ 49 Q.push(ed.v); 50 p[ed.v]=1; 51 } 52 } 53 } 54 } 55 return d[t]!=inf; 56 } 57 Ans costflow(){ 58 Ans ans; 59 ans.flow=ans.cost=0; 60 while(spfa()){ 61 ans.flow+=a[t]; 62 ans.cost+=a[t]*d[t]; 63 for(int i=t;i!=s;i=E[b[i]^1].v){ 64 E[b[i]].w-=a[t]; 65 E[b[i]^1].w+=a[t]; 66 } 67 } 68 return ans; 69 } 70 int main(){ 71 scanf("%d%d",&n,&m); 72 s=1;t=n; 73 rep(i,2,n<<1|1) if(i!=t) addedge(i,i+n,1,0); 74 rep(i,0,m){ 75 int u,v,c; 76 scanf("%d%d%d",&u,&v,&c); 77 addedge(u==1?u:u+n,v,1,c); 78 } 79 Ans ans=costflow(); 80 printf("%d %d\n",ans.flow,ans.cost); 81 return 0; 82 } View Code1877: [SDOI2009]晨跑
Time Limit:?4 Sec??Memory Limit:?64 MBSubmit:?1446??Solved:?756
[Submit][Status][Discuss]
Description
Elaxia最近迷戀上了空手道,他為自己設定了一套健身計劃,比如俯臥撐、仰臥起坐等 等,不過到目前為止,他堅持下來的只有晨跑。 現在給出一張學校附近的地圖,這張地圖中包含N個十字路口和M條街道,Elaxia只能從 一個十字路口跑向另外一個十字路口,街道之間只在十字路口處相交。Elaxia每天從寢室出發 跑到學校,保證寢室編號為1,學校編號為N。 Elaxia的晨跑計劃是按周期(包含若干天)進行的,由于他不喜歡走重復的路線,所以 在一個周期內,每天的晨跑路線都不會相交(在十字路口處),寢室和學校不算十字路 口。Elaxia耐力不太好,他希望在一個周期內跑的路程盡量短,但是又希望訓練周期包含的天 數盡量長。 除了練空手道,Elaxia其他時間都花在了學習和找MM上面,所有他想請你幫忙為他設計 一套滿足他要求的晨跑計劃。Input
第一行:兩個數N,M。表示十字路口數和街道數。 接下來M行,每行3個數a,b,c,表示路口a和路口b之間有條長度為c的街道(單向)。Output
兩個數,第一個數為最長周期的天數,第二個數為滿足最長天數的條件下最短的路程長 度。Sample Input
7 101 2 1
1 3 1
2 4 1
3 4 1
4 5 1
4 6 1
2 5 5
3 6 6
5 7 1
6 7 1
Sample Output
2 11HINT
對于30%的數據,N ≤ 20,M ≤ 120。
對于100%的數據,N ≤ 200,M ≤ 20000。
Source
Day1
[Submit][Status][Discuss]轉載于:https://www.cnblogs.com/chensiang/p/4771375.html
總結
- 上一篇: 常见蓝屏故障及解决办法
- 下一篇: 2018年第41周-sparkSql搭建