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 |
大牛们帮忙看一下,wa死了In Reply To:最早开始工作时间是0么?还是1? Posted by:Rainer at 2007-04-01 13:57:47 #include<iostream> #include<cstring> using namespace std; bool mapp[202][202]; int dis[30][30]; int q,m; struct node{ int p,t,d; }tasks[202]; void ini(){ memset(mapp,0,sizeof(mapp)); memset(dis,0,sizeof(dis)); } int qq[202]; int vm1[202]; int vm2[202]; int pre[202]; int hungary(bool mapp[][202],int v1,int v2){ int n = 0; int current; memset(vm1,-1,sizeof(vm1)); memset(vm2,-1,sizeof(vm2)); int head,tail; int i,j,k; for(i =0;i<v1;i++){ head = tail = 0; memset(pre,-2,sizeof(pre)); for(j = 0;j<v2;j++){ if(mapp[i][j]){ qq[tail++] = j; pre[j]= -1; } } while(head<tail){ current = qq[head]; if(vm2[current] == -1)break; head++; for(j = 0;j<v2;j++){ if(pre[j] == 0xfefefefe && mapp[vm2[current]][j]){ pre[j] = current; qq[tail++] = j; } } } if(head == tail)continue; while(pre[current] != -1){ vm1[vm2[pre[current]]] = current; vm2[current] = vm2[pre[current]]; current = pre[current]; } vm1[i] = current; vm2[current] = i; n++; } return n; } void solve(){ int i,j,k; for(i = 0;i<q;i++){ for(j = 0;j<q;j++){ cin>>dis[i][j]; if(dis[i][j] = -1)dis[i][j] = 100000000; } } //floyd for shortest path for(i = 0;i<q;i++){ for(j = 0;j<q;j++){ if(dis[j][i] != 100000000){ for(k= 0 ;k<q;k++){ if(dis[j][k] > dis[j][i] + dis[i][k] ) dis[j][k] = dis[j][i] + dis[i][k]; } } } } int p,t,d; for(i = 0;i<m;i++){ cin>>p>>tasks[i].t>>tasks[i].d; tasks[i].p = p - 1; } //build the graph for(i = 0;i<m;i++){ for(j = 0;j<m;j++){ //if repair man can finish and show up on time if(tasks[i].t + tasks[i].d + dis[tasks[i].p][tasks[j].p] <= tasks[j].t) mapp[i][j] = true; else mapp[i][j] = false; } } // hungary is a version of b_graph matching cout<<m - hungary(mapp,m,m)<<endl; } int main(){ //freopen("in.txt","r",stdin); cin>>q>>m; while(q!=0 && m != 0){ ini(); solve(); cin>>q>>m; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator