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

诡异的题目

Posted by It_is_rainning_now at 2010-10-20 13:08:27 on Problem 3259
下面的代码感觉是对的,结果是错的。(后面还有代码感觉是错的,结果是对的)
# include <stdio.h>
# include <stdlib.h>
# define MAXVALUE 0x7fffffff;
int dist[1000];
typedef struct p{ 
   int s,t;
   int weight;
}Path;
Path path[10000];
int numField = 0;
int numPath = 0;
bool bell_man(int x){
     
     for(int i = 1; i <= numField; i ++){
             dist[i] = MAXVALUE;
     }
     dist[x] = 0;
     
     for(int k = 0; k < numField; k ++)
     for(int i = 1; i <= numPath; i ++){
          int s = path[i].s;
          int t = path[i].t;
          if(dist[s] + path[i].weight < dist[t]){
              dist[t] = dist[s] + path[i].weight;
          }
     }
     
     for(int i = 1; i <= numPath; i ++){
         int s = path[i].s,t = path[i].t;
         if(dist[s] + path[i].weight < dist[t])
             return true;
     }
     return false;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n1,n2;
        scanf("%d %d %d",&numField,&n1,&n2);
        numPath = 1;
        for(int i = 0; i < n1; i ++){
            scanf("%d %d %d",&path[numPath].s,&path[numPath].t,&path[numPath].weight);
            numPath ++;
            path[numPath].s = path[numPath-1].t;
            path[numPath].t = path[numPath-1].s;
            path[numPath].weight = path[numPath-1].weight;
            numPath ++;
        }
        for(int i = 0; i < n2; i++){
            scanf("%d %d %d",&path[numPath].s,&path[numPath].t,&path[numPath].weight);   
            path[numPath].weight *= -1;
            numPath ++;
        }
        numPath --;
        
        bool flag = false;
        for(int i =1 ; i <= numField; i ++)
          if(bell_man(i)){
           printf("YES\n");
           flag = true;
           break;
        }
        if(!flag)
           printf("NO\n");
    }
    return 0;
}        


下面的代码感觉是错的,结果是对的。
#include <iostream>
using namespace std;

int value[1000];
struct e
{
    int from, to;
    int time;
}edge[25000];

int main()
{
    int f;
    cin >> f;
    while (f--)
    {
        int n, m, w;
        cin >> n >> m >> w;
        int i,j;
        int from, to, time;
        int total = 1;
        for (i = 1; i <= m; ++i)
        {
            cin >> from >> to >> time;
            edge[total].time = time;
            edge[total].from = from;
            edge[total].to = to;
            ++total;
            edge[total].time = time;
            edge[total].from = to;
            edge[total].to = from;
            ++total;
        }
        for (i = 1; i <= w; ++i)
        {
            cin >> from >> to >> time;
            edge[total].time = -time;
            edge[total].from = from;
            edge[total].to = to;
            ++total;
        }
        //memset(value,0,sizeof(value));
        bool flag = true;
        for (i = 0; i < n; ++i)
        {
            
            for (j = 0; j < total; ++j)
                if (value[edge[j].to] > value[edge[j].from] + edge[j].time)
                {
                    value[edge[j].to] = value[edge[j].from] + edge[j].time;
                
                }
                
        }
        
        for (i = 0; i < total; ++i)
            if (value[edge[i].to] > value[edge[i].from] + edge[i].time)
            {
                flag = false;
                break;
            }
        if (flag)
            cout << "NO" << endl;
        else
            cout << "YES" << endl;

    }
    return 0;
}

             

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