这里的数据和题目要求都和原题不同!

Vijos的数据都和别的OJ有所不同,题目也有做修改,所以代码直接Copy会WA!0分!
这里友情提醒,献上0分代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#define reg register
using namespace std;
int n,s,t,A,B,fi[401],w[340001],ne[340001],cnt,x[5][401],y[5][401],val;
double v[340001],dis[401],minn;
bool b[401];
queue<int>q;
void add(reg int u,reg int vv,reg double val1)
{
w[++cnt]=vv;
v[cnt]=val1;
ne[cnt]=fi[u];
fi[u]=cnt;
}
double cal(reg double x1,reg double y1,reg double x2,reg double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double cal2(reg int x1,reg int y1,reg int x2,reg int y2)
{
return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
void getn(int u)
{
reg double k[4]={0,cal2(x[1][u],y[1][u],x[2][u],y[2][u]),
cal2(x[2][u],y[2][u],x[3][u],y[3][u]),
cal2(x[3][u],y[3][u],x[1][u],y[1][u])},tot=k[1]+k[2]+k[3];
reg int fre,num[3]={0};
for(reg int i=1;i<=3;i++)
if(k[i]*2==tot) fre=(i==1 ? 3:i-1);
else num[++num[0]]=(i==1 ? 3:i-1);
x[4][u]=x[num[1]][u]+x[num[2]][u]-x[fre][u];
y[4][u]=y[num[1]][u]+y[num[2]][u]-y[fre][u];
}
int main()
{
scanf("%d",&n);
for(;n--;)
{
scanf("%d%d%d%d",&s,&t,&A,&B);minn=999999999;
memset(fi,0,sizeof(fi));cnt=0;
for(reg int k=1;k<=s;k++)
{
scanf("%d%d%d%d%d%d%d",&x[1][k],&y[1][k],&x[2][k],&y[2][k],&x[3][k],&y[3][k],&val);
getn(k);
for(reg int i=1;i<=3;i++)
for(reg int j=i+1;j<=4;j++)
{
reg double kkz=cal(x[i][k],y[i][k],x[j][k],y[j][k])*(double)val;
add(4*k+i-4,4*k+j-4,kkz);add(4*k+j-4,4*k+i-4,kkz);
}
}
for(reg int k1=1;k1<s;k1++)
for(reg int k2=k1+1;k2<=s;k2++)
for(reg int i=1;i<=4;i++)
for(reg int j=1;j<=4;j++)
{
reg double kkz=cal(x[i][k1],y[i][k1],x[j][k2],y[j][k2])*(double)t;
add(4*k1-4+i,4*k2-4+j,kkz);add(4*k2-4+j,4*k1-4+i,kkz);
}
for(reg int i=1;i<=4;i++)
{
memset(dis,127,sizeof(dis));
q.push(A*4-4+i);b[A*4-4+i]=1;dis[A*4-4+i]=0;
while(!q.empty())
{
reg int k=q.front();q.pop();b[k]=0;
for(reg int j=fi[k];j;j=ne[j])
if(dis[w[j]]>dis[k]+v[j])
{
dis[w[j]]=dis[k]+v[j];
if(!b[w[j]])
{
b[w[j]]=1;q.push(w[j]);
}
}
}
for(reg int j=1;j<=4;j++)
if(dis[B*4-4+j]<minn) minn=dis[B*4-4+j];
}
printf("%.1lf\n",minn);
}
return 0;
}

1 条评论

  • @ 2017-01-22 02:32:46

    。。。所以为什么要直接复制代码呢 0. 0

  • 1

信息

ID
1119
难度
5
分类
图结构 | 最短路 点击显示
标签
递交数
2564
已通过
827
通过率
32%
被复制
16
上传者