#include #include #include #include #include #include using namespace std; typedef long long Int; struct party { int x,y; int start; int ending; }; const double TL=3.0; const double TL2=4.9; bool TimeIsOK() { return (double)clock()/(double)CLOCKS_PER_SEC < TL; } bool TimeIsOK2() { return (double)clock()/(double)CLOCKS_PER_SEC < TL2; } map< pair,pair > savedfact; map< pair,int > savedcake; map< pair,pair >::iterator myit1; map< pair,int >::iterator myit2; Int MIN(Int a,Int b) { if (ab) return a; else return b; } Int ABS(Int a) { if (a<0) return -a; else return a; } Int Sq(Int a) { return a*a; } int n,p,k; int sX,sY; party parties[100111]; Int grid[211][211]; char Path[100111]; int pL=0; Int Sum; Int SqSum; Int GetSadPathPath(int x,int y,int gx,int gy,int cakes) { if (x==gx && y==gy) return 0; if (x==gx) { if (yn) x2=n; if (y2>n) y2=n; for (i=x1;i<=x2;i++) { if (rowsum[i][y2]-rowsum[i][y1-1]>0) return true; } return false; } Int GetWin(int p1,int p2) { int x1,y1; int x2,y2; int xTL,yTL,xBR,yBR; int l,r,mid,best; int i,j; int fX,fY; Int PreTime; Int HaveTime,BestTime; Int NoCakeAns,CakeAns; Int M; Int Val1,Val2; Int BestVal; int cakes; x1=parties[p1].x; y1=parties[p1].y; x2=parties[p2].x; y2=parties[p2].y; //cout<n) continue; if (xTL>=1) { if (hasfactory[xTL][i]==1) { fX=xTL; fY=i; break; } } if (xBR<=n) { if (hasfactory[xBR][i]==1) { fX=xBR; fY=i; break; } } } for (i=xTL;i<=xBR;i++) { if (i<1 || i>n) continue; if (yTL>=1) { if (hasfactory[i][yTL]==1) { fX=i; fY=yTL; break; } } if (yBR<=n) { if (hasfactory[i][yBR]==1) { fX=i; fY=yBR; break; } } } if (fX==0 && fY==0) { for (i=xTL;i<=xBR;i++) { if (HasCakes(i,yTL,i,yBR)) { for (j=yTL;j<=yBR;j++) { if (i>=1 && i<=n && j>=1 && j<=n) { if (hasfactory[i][j]==1) { fX=i; fY=j; break; } } } if (fX!=0 || fY!=0) break; } } } //cout<PreTime) NoCakeAns=MIN( (HaveTime-PreTime),BestTime ); else NoCakeAns=0; //cout<<"thus no cake ans win is "<PreTime) Val1=MIN( (HaveTime-PreTime),BestTime )*(Int)(mid); else Val1=0; PreTime=SqSum+2LL*Sum*(Int)(mid+1)+M*(Int)(mid+1)*(Int)(mid+1)+M; if (HaveTime>PreTime) Val2=MIN( (HaveTime-PreTime),BestTime )*(Int)(mid+1); else Val2=0; if (Val1>BestVal) { BestVal=Val1; best=mid; } if (Val2>BestVal) { BestVal=Val2; best=mid+1; } if (Val1PreTime) CakeAns=MIN( (HaveTime-PreTime),BestTime )*(Int)(best+1); else CakeAns=0; //cout<<"Pretime with 8 cakes is "<NoCakeAns) { savedcake.insert(make_pair(make_pair(p1,p2),best)); return CakeAns; } else { savedcake.insert(make_pair(make_pair(p1,p2),0)); return NoCakeAns; } } bool SP(party A,party B) { return A.ending CP; char myoutput[100000111]; int L=0; void PrintPath() { int i; for (i=1;i<=pL;i++) { //printf("%c",Path[i]); L++; myoutput[L]=Path[i]; } return; } void AddNum(Int K) { char ch[11]; int cL=0; while(K>0) { cL++; ch[cL]=(K%10)+'0'; K/=10; } while(cL>0) { L++; myoutput[L]=ch[cL]; cL--; } return; } void PErase(int ind) { int i; for (i=ind;i<(int)CP.size()-1;i++) { CP[i]=CP[i+1]; } CP.pop_back(); return; } Int F[100111]; int LastChoice[100111]; int main() { freopen("party.in","r",stdin); freopen("party.out","w",stdout); int i,j; int a,b; Int GetVal; Int Ans=0; int FX,FY,CAKES; int p1,p2; int l1,l2,l3; Int V1,V2,V3; int cur; int reach; scanf("%d %d %d",&n,&p,&k); for (i=1;i<=n;i++) { for (j=1;j<=n;j++) { scanf("%lld",&grid[i][j]); } } //cout<<"here?"<F[i]) { F[i]=V1+F[j]; LastChoice[i]=j; } } } reach=i; } Ans=0; cur=1; for (i=2;i<=p;i++) { if (F[i]>V1) { Ans=F[i]; cur=i; } } while(cur!=0) { CP.push_back(cur); cur=LastChoice[cur]; } reverse(CP.begin(),CP.end()); } else { CP.push_back(1); for (i=2;i<=p;i++) { if (!TimeIsOK()) break; //cout<<"At "<0) { Ans+=GetVal; CP.push_back(i); } } cur=0; while(cur