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

题意理解的问题?? AC了 但不明白

Posted by hehexiaobai at 2010-09-14 17:38:44 on Problem 1062
题目说一个人和一个与他等级较低的一个人交易了,就不能再和等级比他高的人进行交易了

我AC的代码,只要求所有交易的(i,i+m)的范围内即可, 没有判断上面的说法。

难道我理解错了??

//poj 1062
#include<iostream>
#include<stdio.h>
#include<cctype>
#include<queue>
#include<vector>
#include<string>
#include<cstring>
using namespace std;
const int MAX = 110;
const int INF = 0x0fffffff;
int M, N;
int map[MAX][MAX];
bool f[MAX][MAX];
int price[MAX], dengji[MAX];
int d[MAX];
bool v[MAX];

void dijstra(int m, int n)
{
     //cout<<m<<' '<<n<<endl;
     memset(v, 0, sizeof v);
     
     for(int i = 1; i <= N; i++)
             d[i] = INF;
             
     d[1] = price[1];
    
     for(int i = 1; i<= N; i++ )
     {
             int min = INF, index = 0;
             
             for(int j=1; j<=N; j++)
                     if(v[j] == false && dengji[j] >= m && dengji[j] <= n && d[j] < min)
                     {
                              min = d[j];
                              index = j; 
                     }
             
             if( min == INF)break;
             v[index] = true;
            
             for(int j = 1; j <= N; j++)
             {
                     if(dengji[j] <= n && dengji[j] >= m &&f[index][j]&& d[j] > d[index] +map[index][j] + price[j] - price[index]  )
                                       d[j] = d[index] +map[index][j] + price[j] - price[index] ;
             }
             
     }
     
    // for(int i=1; i<= N; i++)
      //       cout<<d[i]<<' ';
    // cout<<endl;
     
}

int main()
{
    cin >> M >> N;
    memset (map , 0, sizeof map);
    memset( f, 0, sizeof f);
    int X;
    for(int i=1; i <= N; i++)
    {
            cin >> price[i] >> dengji[i] >> X;
            for(int j = 1 ,t, p ; j <= X; j++)
            {
                    cin >> t >> p;
                    map[i][t] = p;
                    f[i][t] = true;
            }
    }
 
    int ans=INF;
                      
    for(int i = dengji[1]-M ; i <= dengji[1]; i++)
    {
            
            dijstra(i, i+M);
            
            for(int j = 1; j <= N; j++ )
            {
                    if( d[j] != INF && d[j] < ans)
                             ans = d[j];
            }
    }
    
    cout << ans  << endl;
    
    system("pause");
    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