浙大ZJU-1082(Stockbroker Grapevine),指点一下是哪里问题
#include<iostream>
using namespace std;
const int MAX = 101;
int mintime, min;
struct hziee{
bool flag;
int next[MAX];
int num;
int time;
int order;
void operator = (struct hziee b) {
flag = b.flag;
num = b.num;
time = b.time;
order = b.order;
for(int i=0; i<MAX; i++)
next[i] = b.next[i];
}
}hziee[MAX];
void init(int n) {
int i,j,k;
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++)
hziee[i].next[j] = 100;
cin>>hziee[i].num;
for(j=1; j<=hziee[i].num; j++) {
cin>>k;
cin>>hziee[i].next[k];
}
hziee[i].flag = false;
hziee[i].order = i;
hziee[i].time = 0;
}
}
void sort(int n) {
struct hziee temp;
int m;
for(int i=1; i<=n; i++) {
m=i;
for(int j=i+1; j<=n; j++) {
if(hziee[j].num > hziee[m].num)
m = j;
temp = hziee[i];
hziee[i] = hziee[m];
hziee[m] = temp;
}
}
}
bool process(int n)
{
int i,j,time, head, rear;
struct hziee p[MAX], q[MAX], temp;
for(i = 1; i <= n; i++ ) {
for(j = 1; j <= n; j++ )
p[j] = hziee[j];
time = 0;
head = rear = 0;
if(p[i].num != 0) {
p[p[i].order].flag = true;
q[++rear] = p[i];
while(rear < n && head != rear) {
temp = q[++head];
for(j=1; j<=n; j++)
if(temp.next[j] <= 10 && !p[j].flag) {
p[j].time = temp.time + temp.next[j];
p[j].flag = true;
q[++rear] = p[j];
}
}//while
if(rear == n) {
for(j=1; j<=n; j++)
if(p[j].time > time)
time = p[j].time;
if(mintime == 0) {
mintime = time;
min = p[i].order;
}
else if(time < mintime) {
mintime = time;
min = p[i].order;
}
}//if
}//if
}//for
if(mintime == 0)
return false;
else
return true;
}
int main()
{
int n;
while(cin>>n) {
if(n==0)
break;
if(n==1) {
cout<<"1 0"<<endl;
continue;
}
init(n);
sort(n);
mintime = 0;
if(process(n))
cout<<min<<" "<<mintime<<endl;
else
cout<<"disjoint"<<endl;
}
return 0;
}