| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
好心人帮忙看看这个为什么wa了,谢谢.#include <iostream>
using namespace std;
#define N 101
int m,n;
int dis[N][N];
int l[N];
bool use[N];
inline int Abs(int a)
{
return a>0 ? a : -a;
}
int ReadData()
{
if(scanf("%d%d",&m,&n)==EOF)
return 0;
memset(dis,-1,sizeof(dis));
int i,j,cnt;
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&dis[0][i],&l[i],&cnt);
int t,v;
for(j=0;j<cnt;j++)
{
scanf("%d%d",&t,&v);
dis[t][i]=v;
}
}
for(i=1;i<=n;i++) //如果等级差超过了m的处理掉
{
for(j=1;j<=n;j++)
{
if(i==j || Abs(l[i]-l[j])<=m)
continue;
dis[i][j]=dis[j][i]=-1;
}
}
return 1;
}
int ChooseMin()
{
int res=-1;
int i;
for(i=1;i<=n;i++)
{
if(! use[i] && (res==-1 || dis[0][i]<dis[0][res]))
res=i;
}
return res;
}
void Dijkstra()
{
memset(use,false,sizeof(use));
int cnt;
for(cnt=0;cnt<n;cnt++) //逐个把n个点加入到已访问的集合
{
int Min=ChooseMin();
use[Min]=true;
int i;
for(i=1;i<=n;i++)
{
if(use[i])
continue;
if((dis[0][Min]!=-1 && dis[Min][i]!=-1 && dis[0][i]==-1) || (dis[0][Min]!=-1 && dis[Min][i]!=-1 && dis[0][Min]+dis[Min][i]<dis[0][i]))
dis[0][i]=dis[0][Min]+dis[Min][i];
}
}
}
int main()
{
while(ReadData())
{
Dijkstra();
printf("%d\n",dis[0][1]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator