【BZOJ 1877】 [SDOI2009]晨跑
2016-02-02 11:08
435 查看
带着 freopen提交会TLE.......
1 #include <cstdio>
2 #include <iostream>
3 #include <string>
4 #include <algorithm>
5 using namespace std;
6 #define N 1000000
7 #define INF 1000000000
8 int n,m,s,t;
9 int tot=1,g
,nnext
,cost
,flow
,num
;
void Add(int x,int y,int z,int f)
{
// cout<<x<<' '<<y<<' '<<z<<' '<<f<<endl;
tot++;
nnext[tot]=g[x];
g[x]=tot;
num[tot]=y;
cost[tot]=z;
flow[tot]=f;
}
int fa
,fx
,d[500],team
,head,tail;
bool b
;
bool SPFA()
{
// cout<<endl;
for(int i=1;i<=n*2;i++) d[i]=INF;
d[s]=0;
head=tail=0;
team[++tail]=s; b[s]=true;
while(head<tail)
{
int x=team[++head];b[x]=false; //cout<<x<<' ';
for(int i=g[x];i;i=nnext[i])
if(d[num[i]]>d[x]+cost[i]&&flow[i]!=0)
{
d[num[i]]=d[x]+cost[i]; //cout<<num[i]<<' ';
fa[num[i]]=x;
fx[num[i]]=i;
if(!b[num[i]])
{
b[num[i]]=true;
team[++tail]=num[i];
}
}//cout<<endl;
}
if(d[t]==INF) return false;
return true;
}
int main()
{
// freopen("a.in","r",stdin);
scanf("%d %d",&n,&m);s=1+n,t=n;
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
Add(x+n,y,z,1);
Add(y,x+n,-z,0);
}
for(int i=1;i<=n;i++)
{
Add(i,i+n,0,1);
Add(i+n,i,0,0);
}
int max_flow=0,min_cost=0;
while(SPFA())
{
max_flow++;
for(int i=t;i!=s;i=fa[i])
{
// cout<<i<<' '<<cost[fx[i]]<<endl;
int tmp=fx[i];
min_cost+=cost[tmp];
flow[tmp]--;
flow[tmp^1]++;
}//cout<<min_cost<<endl;cout<<endl;
}
printf("%d %d\n",max_flow,min_cost);
return 0;81 }
1 #include <cstdio>
2 #include <iostream>
3 #include <string>
4 #include <algorithm>
5 using namespace std;
6 #define N 1000000
7 #define INF 1000000000
8 int n,m,s,t;
9 int tot=1,g
,nnext
,cost
,flow
,num
;
void Add(int x,int y,int z,int f)
{
// cout<<x<<' '<<y<<' '<<z<<' '<<f<<endl;
tot++;
nnext[tot]=g[x];
g[x]=tot;
num[tot]=y;
cost[tot]=z;
flow[tot]=f;
}
int fa
,fx
,d[500],team
,head,tail;
bool b
;
bool SPFA()
{
// cout<<endl;
for(int i=1;i<=n*2;i++) d[i]=INF;
d[s]=0;
head=tail=0;
team[++tail]=s; b[s]=true;
while(head<tail)
{
int x=team[++head];b[x]=false; //cout<<x<<' ';
for(int i=g[x];i;i=nnext[i])
if(d[num[i]]>d[x]+cost[i]&&flow[i]!=0)
{
d[num[i]]=d[x]+cost[i]; //cout<<num[i]<<' ';
fa[num[i]]=x;
fx[num[i]]=i;
if(!b[num[i]])
{
b[num[i]]=true;
team[++tail]=num[i];
}
}//cout<<endl;
}
if(d[t]==INF) return false;
return true;
}
int main()
{
// freopen("a.in","r",stdin);
scanf("%d %d",&n,&m);s=1+n,t=n;
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
Add(x+n,y,z,1);
Add(y,x+n,-z,0);
}
for(int i=1;i<=n;i++)
{
Add(i,i+n,0,1);
Add(i+n,i,0,0);
}
int max_flow=0,min_cost=0;
while(SPFA())
{
max_flow++;
for(int i=t;i!=s;i=fa[i])
{
// cout<<i<<' '<<cost[fx[i]]<<endl;
int tmp=fx[i];
min_cost+=cost[tmp];
flow[tmp]--;
flow[tmp^1]++;
}//cout<<min_cost<<endl;cout<<endl;
}
printf("%d %d\n",max_flow,min_cost);
return 0;81 }
相关文章推荐
- apache2+passenger遇到的问题总结:
- CALayer Mask - 2 - CAShapeLayer
- 写给想成为Linux 高手的人们
- rewqrewqrqwe
- Unity错误集锦之插件篇
- 安卓学习日志(2)UDP通信
- datatables 使用心得
- android findViewById(...)的抽取
- 89785784567756
- 123512343124
- Code Project网站上关注的一些人
- 4123432141324132
- MVC MVP MVVM
- 学习hadoop过程中用到的linux命令:
- 【设计模式】——享元模式
- freebsd 显示中文
- CT 来值班,让您安心过新年!
- 3214324124
- 32145132
- linux环境下升级python