Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

好奇怪,一直WA,求求大家能不能帮忙看一下啊,调崩溃了,自信没问题的~~~~(>_<)~~~~

Posted by GerJCS at 2024-10-18 20:14:29 on Problem 3268
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
int n,m,x;
int dir[1010][1010];
int dir_go[1010][1010];
struct Node{
    int num;
    int weight;
bool operator<(const Node &a)const{
    if(weight==a.weight)
        return num > a.num;
    return weight>a.weight;
}
};
int ans[1010][1010];
        int maxnum=0;
        int a,b,c;
int ans_go[1010][1010];
priority_queue<Node>q;
Node firstnode;
Node thisnode;
Node nextnode;
int main()
{
    while(scanf("%d%d%d",&n,&m,&x)!=EOF){
        memset(dir,0x3f,sizeof(dir));
        memset(ans,0x3f,sizeof(ans));
        memset(ans_go,0x3f,sizeof(ans_go));
        memset(dir_go,0x3f,sizeof(dir_go));
        for(int i=0;i<m;i++){
            scanf("%d%d%d",&a,&b,&c);
            dir[a][b]=c;
            dir_go[b][a]=c;
        }
        for(int i=1;i<=n;i++){
            dir[i][i]=0;
            ans[i][i]=0;
            dir_go[i][i]=0;
            ans_go[i][i]=0;
        }

//        int i=x;
        firstnode.num=x;
        firstnode.weight=0;
        q.push(firstnode);
        while(!q.empty()){
            thisnode=q.top();
            q.pop();
            for(int j=1;j<=n;j++){
                if(ans[x][j]>thisnode.weight+dir[thisnode.num][j]){
                    ans[x][j]=thisnode.weight+dir[thisnode.num][j];
                    nextnode.num=j;
                    nextnode.weight=ans[x][j];
                    q.push(nextnode);
                }
            }
        }

        firstnode.num=x;
        firstnode.weight=0;
        q.push(firstnode);
        while(!q.empty()){
            thisnode=q.top();
            for(int j=1;j<=n;j++){
                if(ans_go[x][j]>thisnode.weight+dir_go[thisnode.num][j]){
                    ans_go[x][j]=thisnode.weight+dir_go[thisnode.num][j];
                    nextnode.num=j;
                    nextnode.weight=ans_go[x][j];
                    q.push(nextnode);
                }
            }
            q.pop();
        }
        maxnum=0;
        for(int i=1;i<=n;i++){
            if(maxnum<ans[x][i]+ans_go[x][i])
                maxnum=ans[x][i]+ans_go[x][i];
        }
        printf("%d\n",maxnum);
    }
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator