分析:
雙倍經驗(資料範圍不同)。
我們考慮,我們必定是從1走一條邊到節點i,之後從i到j跑最短路,之後再從j到1走另一條邊的情況下,不會重複,並且是答案。那麼我們考慮預處理出pre[i]表示從1走到i滿足最短路的並且經過pre[i],pre[i]為路徑第二個節點。那麼,針對每乙個邊,(x,y,z,v)滿足當x!=1&&y!=1時,如果pre[x]!=pre[y]連線1,x,dis[y]+z和1,y,dis[x]+v(因為答案如果經過這個邊,那麼答案一定是dis[x]+dis[y]+z或者dis[x]+dis[y]+v中的乙個),如果pre[x]==pre[y],那麼保留這兩條邊。需要特判x==1||y==1的情況,具體看**。
附上**:
#include #include #include #include #include #include #include #include using namespace std;#define n 10010
struct node
e[600010];
int dis[n],pre[n],vis[n],head[n],cnt,n,m;
void add(int x,int y,int z)
void spfa()
} }//printf("%d %d %d\n",dis[1],dis[2],dis[3]);
}struct no
a[400010];
int main()
spfa();
memset(head,-1,sizeof(head));cnt=0;
for(int i=1;i<=m;i++)
if(y==1)
if(pre[x]!=pre[y])add(1,y,dis[x]+z),add(1,x,dis[y]+v);
else add(x,y,z),add(y,x,v);
} for(int i=1;i<=n;i++)dis[i]=1<<30;
spfa();
printf("%d\n",dis[n+1]);
return 0;
}
種植福田 培植福報 福慧雙修 悟透自己!
種植福田 福慧雙修 悟透自己!悟透自己!人生在世,和 自己 相處最多,打交道最多,但是往往悟不透 自己 走上坡路時,往往把自己估計過高,認為一切都能唾手可得,甚至把運氣和機遇,也看作自己身價的一部分而喜不自勝。走下坡路時,又往往妄自菲薄,把自己估計過低,把困難和不利看作是自己的無能,而實際上是被怯懦...