mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
Update 1511_xuezhongfenfei.cpp
Formatted.
This commit is contained in:
parent
eea6f821d3
commit
e81fc68636
|
@ -3,8 +3,8 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
typedef struct fun
|
typedef struct fun
|
||||||
{
|
{
|
||||||
int a,w,pre;
|
int a,w,pre;
|
||||||
}e;
|
} e;
|
||||||
fun link[2][1000005];
|
fun link[2][1000005];
|
||||||
bool vis[1000005];
|
bool vis[1000005];
|
||||||
int point[2][1000005];
|
int point[2][1000005];
|
||||||
|
@ -12,73 +12,73 @@ __int64 price[1000005];
|
||||||
int P,Q;
|
int P,Q;
|
||||||
void spfa(int n)
|
void spfa(int n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for(i=2; i<=P; i++)
|
for(i=2; i<=P; i++)
|
||||||
{
|
|
||||||
vis[i]=false;
|
|
||||||
price[i]=INT_MAX;
|
|
||||||
}
|
|
||||||
vis[1]=true;
|
|
||||||
price[i]=0;
|
|
||||||
queue<int>q;
|
|
||||||
q.push(1);
|
|
||||||
while(q.empty()==false)
|
|
||||||
{
|
|
||||||
int t=q.front();
|
|
||||||
q.pop();
|
|
||||||
vis[t]=false;
|
|
||||||
i=point[n][t];
|
|
||||||
while(i!=-1)
|
|
||||||
{
|
|
||||||
|
|
||||||
int v=link[n][i].a;
|
|
||||||
if(price[v]>price[t]+link[n][i].w)
|
|
||||||
{
|
{
|
||||||
price[v]=price[t]+link[n][i].w;
|
vis[i]=false;
|
||||||
if(vis[v]==false)
|
price[i]=INT_MAX;
|
||||||
{
|
}
|
||||||
vis[v]=true;
|
vis[1]=true;
|
||||||
q.push(v);
|
price[i]=0;
|
||||||
}
|
queue<int>q;
|
||||||
|
q.push(1);
|
||||||
|
while(q.empty()==false)
|
||||||
|
{
|
||||||
|
int t=q.front();
|
||||||
|
q.pop();
|
||||||
|
vis[t]=false;
|
||||||
|
i=point[n][t];
|
||||||
|
while(i!=-1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int v=link[n][i].a;
|
||||||
|
if(price[v]>price[t]+link[n][i].w)
|
||||||
|
{
|
||||||
|
price[v]=price[t]+link[n][i].w;
|
||||||
|
if(vis[v]==false)
|
||||||
|
{
|
||||||
|
vis[v]=true;
|
||||||
|
q.push(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i=link[n][i].pre;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
i=link[n][i].pre;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int T,i,a,b,c;
|
int T,i,a,b,c;
|
||||||
scanf("%d",&T);
|
scanf("%d",&T);
|
||||||
while(T--)
|
while(T--)
|
||||||
{
|
{
|
||||||
scanf("%d%d",&P,&Q);
|
scanf("%d%d",&P,&Q);
|
||||||
for(i=1; i<=P; i++)
|
for(i=1; i<=P; i++)
|
||||||
point[0][i]=point[1][i]=-1;//这个是用来弄初值的
|
point[0][i]=point[1][i]=-1;//这个是用来弄初值的
|
||||||
i=0;
|
i=0;
|
||||||
for(i=1; i<=Q; i++)
|
for(i=1; i<=Q; i++)
|
||||||
{
|
{
|
||||||
scanf("%d%d%d",&a,&b,&c);
|
scanf("%d%d%d",&a,&b,&c);
|
||||||
link[0][i].a=a;
|
link[0][i].a=a;
|
||||||
link[0][i].w=c;
|
link[0][i].w=c;
|
||||||
link[1][i].a=b;
|
link[1][i].a=b;
|
||||||
link[1][i].w=c;
|
link[1][i].w=c;
|
||||||
link[1][i].pre=point[1][a];//记录的是以a开头的
|
link[1][i].pre=point[1][a];//记录的是以a开头的
|
||||||
point[1][a]=i;
|
point[1][a]=i;
|
||||||
link[0][i].pre=point[0][b];
|
link[0][i].pre=point[0][b];
|
||||||
point[0][b]=i;
|
point[0][b]=i;
|
||||||
}
|
}
|
||||||
__int64 sum=0;
|
__int64 sum=0;
|
||||||
spfa(1);//是用来出发点不同的啊
|
spfa(1);//是用来出发点不同的啊
|
||||||
for(i=1; i<=P; i++)
|
for(i=1; i<=P; i++)
|
||||||
{
|
{
|
||||||
sum+=price[i];
|
sum+=price[i];
|
||||||
}
|
}
|
||||||
spfa(0);
|
spfa(0);
|
||||||
for(i=1; i<=P; i++)
|
for(i=1; i<=P; i++)
|
||||||
{
|
{
|
||||||
sum+=price[i];
|
sum+=price[i];
|
||||||
}
|
}
|
||||||
printf("%I64d\n",sum);
|
printf("%I64d\n",sum);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user