水的一b。。。 20分钟就敲好了,,没想到tmd居然敢卡vector!!!纠结了,为什么用vector会超内存!!!为什么啊!!!!!!!搞的我去鸟神的blog学了个静态邻接表,用的真变扭!!!不过还好,虽蛋疼但能ac。。。。。
#include<iostream>
#include<queue>
#include<set>
#include<algorithm>
#include<vector>
#include<map>
#include<iomanip>
#include<cmath>
using namespace std;
const int maxn = 1000011;
const int inf = 0x3f3f3f3f;
struct zz
{
int to;
int from;
int cost;
int next;
}zx,tz,g[maxn],g2[maxn];
int head[maxn];
int head2[maxn];
int e1,e2;
int t,p,q,now,cgo,cback,temp,sum,sum2,tv;
//vector<zz>g[maxn];
//vector<zz>g2[maxn];
queue<int>Q;
int go[maxn];
int back[maxn];
bool vis[maxn];
inline void init()
{
memset(head,0,sizeof(head));
memset(head2,0,sizeof(head2));
for(int i=1;i<=p;i++)
{
go[i]=inf;
back[i]=inf;
}
e1=1;
e2=1;
return ;
}
inline void add()
{
zx.next=head[zx.from];
head[zx.from]=e1;
g[e1++]=zx;
return;
}
inline void add2()
{
zx.next=head2[zx.to];
head2[zx.to]=e2;
g2[e2++]=zx;
return;
}
void spfa()
{
while(!Q.empty())
{
Q.pop();
}
memset(vis,false,sizeof(vis));
go[1]=0;
Q.push(1);
vis[1]=true;
while(!Q.empty())
{
now=Q.front();
Q.pop();
tv=head[now];
while(tv)
{
temp = g[tv].to;
cgo = g[tv].cost + go[now];
if( cgo < go[temp] )
{
go[temp]=cgo;
if(!vis[temp])
{
Q.push(temp);
vis[temp]=true;
}
}
tv=g[tv].next;
}
vis[now]=false;
}
sum=0;
for(int x=1;x<=p;x++)
{
sum+=go[x];
}
return ;
}
void spfa2()
{
while(!Q.empty())
{
Q.pop();
}
memset(vis,false,sizeof(vis));
Q.push(1);
vis[1]=true;
back[1]=0;
while(!Q.empty())
{
now=Q.front();
Q.pop();
tv=head2[now];
while(tv)
{
temp = g2[tv].from;
cback = g2[tv].cost + back[now];
if(cback < back[temp] )
{
back[temp]=cback;
if(!vis[temp])
{
Q.push(temp);
vis[temp]=true;
}
}
tv=g2[tv].next;
}
vis[now]=false;
}
sum2=0;
for(int x=1;x<=p;x++)
{
sum2+=back[x];
}
return ;
}
int main()
{
cin>>t;
while(t--)
{
cin>>p>>q;
init();
for(int i=1;i<=q;i++)
{
scanf("%d%d%d",&zx.from,&zx.to,&zx.cost);
add();
add2();
}
spfa();
spfa2();
printf("%d\n",sum+sum2);
}
return 0;
}
分享到:
相关推荐
杭电hdu acm资料所用杭电的acm题
hdu_2102_passed_sorce
杭电 hdu acm 第1084题的解法,ac过了,是一位学长教我的.内有一些中文说明.
此程序为hdu的acm2010题,就是解决水仙花数问题
HDU_ACM培训课件(完整版) HDU_ACM培训课件(完整版) HDU_ACM培训课件(完整版) HDU_ACM培训课件(完整版)
模式识别_hdu_期末复习资料集合_试卷笔记.zip
杭电OJ部分答案,可以很简单的解决a+b求和问题及其他问题。
HDU_ACM_1002_大数相加C源代码,利用字符串处理
HDU一部分题目原码,大部分是可运行的,可能有几题不完整
数字图像处理_hdu_期末复习资料_试卷等.zip
高级计算机图形学_mm的_重点笔记_hdu_吴xy.pdf
数字图像处理总ppt_hdu_许老师.pdf
里面包含:实验1~8的源代码,ISE软件直接导入就能使用、课件PPT、3份实验报告、实验要求与评分标准。
基础算法类 ACM 入门 杭电OJ 11页题目题解,算法入门的时候刷题可以参考 搜集整理起来了比单个去搜题解方便快捷
B_(HDU_1231)(最大子段和,分治).cpp
hdu题解的答案十分简单的一个题,思路清晰,特别简单
杭电acm解题报告 详细解析2000-2099 适合acm初学者
For a positive integer n, let’s denote function f(n,m) as the m-th smallest integer x that x>n and gcd(x,n)=1. For example, f(5,1)=6 and f(5,5)=11. You are given the value of m and (f(n,m)?...
题目链接题目意思给你n个点,让你在这n个点之间加边,但是不管咋加都不能形成三个点的直接相通环,让求最大的边数。要求最大的边数还不能出现三个边的环,我们可以将n个
hdu 3378 三国杀标程 解题报告