| ||||||||||
| 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 | |||||||||
可以用SPFA啊。In Reply To:用short邻接矩阵险过~~~ Posted by:996195670 at 2014-07-24 16:32:48 > #include<stdio.h>
> #include<string.h>
> #define N 5008
> #define INF 0xffff;
> int lowcast[N];
> int num[N];
> unsigned short w[N][N];
> int ans;
> int n,m;
> void input();
> struct node {
> int u;
> int v;
> int value;
> };
> node eg[200005];
> void dikjstra(int start);
> int getsecond();
> void show();
> int main(){
> //freopen("1.txt","r",stdin);
> while (scanf("%d%d",&n,&m)!=EOF){
> input();
> ans=0;
> dikjstra(1);
> for (int i=1;i<=n;i++){
> num[i]=lowcast[i];
> }
> dikjstra(n);
> ans=getsecond();
> //show();
> printf("%d\n",ans);
> }
> }
> void input(){
> int a;int b;int c;
> int s=1;
> for (int i=1;i<N;i++){
> for (int j=1;j<N;j++)
> if (i==j)
> w[i][j]=0;
> else
> w[i][j]=INF;
> }
> for (int i=0;i<m;i++){
> scanf("%d%d%d",&a,&b,&c);
> eg[i+1].u=a;
> eg[i+1].v=b;
> eg[i+1].value=c;
> if (c<w[a][b]){
> w[a][b]=w[b][a]=c;
> }
> }
> }
> void dikjstra(int start){
> memset(lowcast,0,sizeof(lowcast));
> int used[N]={0};
> int i,j,k;
> for (i=1;i<=n;i++){
> lowcast[i]=w[start][i];
> }
> lowcast[start]=0;
> used[start]=1;
> for (i=0;i<n;i++){
> int min=INF;
> j=1;
> for (k=1;k<=n;k++){
> if (min>lowcast[k]&&!used[k]){
> min=lowcast[k];
> j=k;
> }
> }
> used[j]=1;
> for (k=1;k<=n;k++){
> if (lowcast[j]+w[j][k]<lowcast[k]&&!used[k]){
> lowcast[k]=lowcast[j]+w[j][k];
> }
> }
> }
> }
> int getsecond(){
> int i,j,k;
> int min=INF;
> int t;
> for (i=1;i<=m;i++){
> int tempu=eg[i].u;
> int tempv=eg[i].v;
> int tempvalue=eg[i].value;
> t=lowcast[tempv]+num[tempu]+tempvalue;
> if (t<min&&t>lowcast[1]){
> min=t;
> }
> t=lowcast[tempu]+num[tempv]+tempvalue;
> if (t<min&&t>lowcast[1]){
> min=t;
> }
> }
> return min;
> }
> void show(){
> for (int i=1;i<=n;i++){
> for (int j=1;j<=n;j++){
> printf("%d ",w[i][j]);
> }
> printf("\n");
> }
> for (int i=1;i<=n;i++){
> printf("%d ",lowcast[i]);
> }
> printf("\n");
> for (int i=1;i<=n;i++){
> printf("%d ",num[i]);
> }
> printf("\n");
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator