USACO/butter 3.2.6
2013-05-13 00:17
447 查看
主要用到spfa
#include<stdio.h>
#include<stdlib.h>
#define max 100000000
int dis[810][810]={0};
int con[810][810]={0};
int visit[1000]={0};
int edge[810]={0};
int num;
int queue[2000],front,rear;
/*====================
初始化
======================*/
void init(int ars[][810])
{
int i ,j;
for(i=0;i<801;i++)
{
for(j=0;j<801;j++)
{
if(i!=j)
{
dis[i][j]=max;
}
}
}
}
/*======================
spfa算法
=======================*/
void spfa(int n,int pasture,int final[])
{
int i ,j,t,k;
for(i=1;i<=pasture;i++)
{
final[i]=max;
}
final
=0;
queue[rear++]=n;
visit
=1;
while(front<rear)
{
k=queue[front++];
for(i=1;i<=edge[k];i++)
{
t=con[k][i];
if(final[t]>final[k]+dis[k][t])
{
final[t]=final[k]+dis[k][t];
if(!visit[t])
{
queue[rear++]=t;
visit[t]=1;
}
}
}
visit[k]=0;
}
}
int main()
{
FILE *fin=fopen("butter.in","r");
FILE *fout=fopen("butter.out","w");
int pasture;
int path;
int cow[600]={0};
int i ,j,x,y,t;
int ans=max;
int sum;
int final[2000];
fscanf(fin,"%d %d %d",&num,&pasture,&path);
init(dis);
for(i=0;i<num;i++)
{
fscanf(fin,"%d",&cow[i]);
}
for(i=0;i<path;i++)
{
fscanf(fin,"%d %d %d",&x,&y,&t);
edge[x]++;con[x][edge[x]]=y;dis[x][y]=t;
edge[y]++;con[y][edge[y]]=x;dis[y][x]=t;
}
for(i=1;i<=pasture;i++)
{
memset(visit,0,sizeof(visit));
front=rear=0;
spfa(i,pasture,final);
sum=0;
for(j=0;j<num;j++)
{
sum+=final[cow[j]];
}
ans=ans<sum?ans:sum;
}
fprintf(fout,"%d\n",ans);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define max 100000000
int dis[810][810]={0};
int con[810][810]={0};
int visit[1000]={0};
int edge[810]={0};
int num;
int queue[2000],front,rear;
/*====================
初始化
======================*/
void init(int ars[][810])
{
int i ,j;
for(i=0;i<801;i++)
{
for(j=0;j<801;j++)
{
if(i!=j)
{
dis[i][j]=max;
}
}
}
}
/*======================
spfa算法
=======================*/
void spfa(int n,int pasture,int final[])
{
int i ,j,t,k;
for(i=1;i<=pasture;i++)
{
final[i]=max;
}
final
=0;
queue[rear++]=n;
visit
=1;
while(front<rear)
{
k=queue[front++];
for(i=1;i<=edge[k];i++)
{
t=con[k][i];
if(final[t]>final[k]+dis[k][t])
{
final[t]=final[k]+dis[k][t];
if(!visit[t])
{
queue[rear++]=t;
visit[t]=1;
}
}
}
visit[k]=0;
}
}
int main()
{
FILE *fin=fopen("butter.in","r");
FILE *fout=fopen("butter.out","w");
int pasture;
int path;
int cow[600]={0};
int i ,j,x,y,t;
int ans=max;
int sum;
int final[2000];
fscanf(fin,"%d %d %d",&num,&pasture,&path);
init(dis);
for(i=0;i<num;i++)
{
fscanf(fin,"%d",&cow[i]);
}
for(i=0;i<path;i++)
{
fscanf(fin,"%d %d %d",&x,&y,&t);
edge[x]++;con[x][edge[x]]=y;dis[x][y]=t;
edge[y]++;con[y][edge[y]]=x;dis[y][x]=t;
}
for(i=1;i<=pasture;i++)
{
memset(visit,0,sizeof(visit));
front=rear=0;
spfa(i,pasture,final);
sum=0;
for(j=0;j<num;j++)
{
sum+=final[cow[j]];
}
ans=ans<sum?ans:sum;
}
fprintf(fout,"%d\n",ans);
return 0;
}
相关文章推荐
- USACO3.2.6 Sweet Butter (butter)
- USACO3.2.6 Sweet Butter (butter)
- usaco3.2.6 Sweet Butter
- usaco Sweet Butter
- USACO Section 3.2 Sweet Butter (butter)
- USACO - 3.2.6 Sweet Butter 香甜的黄油 Dijkstra(迪杰斯特拉算法)+枚举
- usaco3.2.6魔板
- dijkstra+堆优化 USACO 3.2.6 Sweet Butter
- USACO3.2.6 香甜的黄油 (SPFA)
- [Usaco-3.2.6] Sweet Butter香甜的黄油
- usaco butter java
- USACO3.2.6--Sweet Butter
- USACO3.2.6 香甜的黄油 解题报告
- usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)
- USACO Sweet Butter 解题报告
- USACO--3.2Sweet Butter+推优化的Dijkstral算法
- USACO3.2.5-butter
- JZOJ1287.【USACO题库】3.2.6 Sweet Butter香甜的黄油
- USACO 3.2.6 sweet butter
- Cpp环境【Usaco 3.2.6】【Vijos1251】Павлов的香甜黄油