int main() { int TC, x, y; scanf("%d",&TC); for(int tc=1; tc<=TC; ++tc) { scanf("%d%d",&N,&R); P.clear(); edges.clear(); for(int i = 0; i < N; ++i) { scanf("%d%d",&x,&y); P.push_back(ii(x,y)); } for(int i = 0; i < N; ++i) { for(int j = i+1; j < N; ++j) { edges.push_back(Edge(i,j,dist(P[i].first,P[i].second, P[j].first,P[j].second))); } } sort(edges.begin(),edges.end(),cmp()); DisjointSet dset(N); double cost_road=0.0, cost_railroad=0.0; int n_state = 1; for(int i = 0; i < edges.size() && dset.size() > 1; ++i) { if(dset.union_rep(edges[i].u,edges[i].v)) { if(edges[i].cost > R) { cost_railroad+=edges[i].cost; n_state++; } else { cost_road+=edges[i].cost; } } } printf("Case #%d: %d %d %d\n",tc,n_state,int(round(cost_road)),int(round(cost_railroad))); } return 0; }
inline void Updata(int t) { int N = L[t].size(); VII tmp; for (SII::iterator it = L[t].begin(); it != L[t].end() && it->F < N;) { tmp.push_back(*it); L[t].erase(it++); } for (VII::iterator it = tmp.begin(); it != tmp.end(); it++) { Ans[it->index] = it->F = N; L[t].insert(*it); } }
inline VII BabyStep(int a, int b, int c) { VII ret; int m = (int)sqrt(c) + 1, tmp = 1; a %= c; if (a == 0) return ret; insert(1, 0); for (int i = 1; i <= m; i++) tmp = (Int65) tmp * a % c, insert(tmp, i); int gss = b, opp = Pow(tmp, c - 2, c); for (int i = 0, d; i <= m; i++) { int index = gss % MOD; for (Edge *p = e[index]; p; p = p->next) if (p->index == gss) ret.push_back(i * m + p->value); gss = (Int65) gss * opp % c; } return ret; }
inline void solve(void) { scanf("%d%d%d", &p, &a, &k); Divid(p - 1); if (p == 2) { if (k == 0) printf("%d\n%d\n", 1, 0); else printf("%d\n%d\n",1, 1); return; } int g = GetRoot(p); int tmp = Pow(g, a, p); VII ret = BabyStep(tmp, k, p); SII Ans; for (VII::iterator it = ret.begin(); it != ret.end(); it++) { Ans.insert(Pow(g, *it, p)); } printf("%d\n", Ans.size()); for (SII::iterator it = Ans.begin(); it != Ans.end(); it++) printf("%d\n", *it); }
VII ConvexHull( VII points){ int fwd=0; VII CH; for(int i=0; i<points.size(); i++){ while(fwd>1 and CP( CH[fwd-2], CH[fwd-1], points[i] ) <= 0) CH.pop_back(),fwd--; CH.push_back(points[i]),fwd++; } int bwd=fwd; for(int i=points.size()-2; i>=0; i--){ while(bwd > fwd and CP(CH[bwd-2], CH[bwd-1], points[i]) <=0 ) CH.pop_back(),bwd--; CH.push_back(points[i]),bwd++; } CH.erase(CH.begin()); //printf("\nsize : %d\n", CH.size()); return CH; }
int main(){ int n;si(n); for(int i=0;i<n;i++){ int x,y;si(x);si(y); a.PB(MP(x,y)); } int cnt = 0; for(int i=1;i<n-1;i++){ if(a[i-1].S==a[i].S and a[i-1].F<a[i].F and a[i+1].S>a[i].S and a[i+1].F==a[i].F) cnt++; if(a[i-1].S>a[i].S and a[i-1].F==a[i].F and a[i+1].S==a[i].S and a[i+1].F>a[i].F) cnt++; if(a[i-1].S==a[i].S and a[i-1].F>a[i].F and a[i+1].S<a[i].S and a[i+1].F==a[i].F) cnt++; if(a[i-1].S<a[i].S and a[i-1].F==a[i].F and a[i+1].S==a[i].S and a[i+1].F<a[i].F) cnt++; } dout(cnt); return 0; }
int main(){ int n,k; si(n);si(k); int lmx = 0; for(int i=1;i<=n;i++){ int a;si(a); lmx = max(lmx,a); s.insert(a); v[a].PB(i); } if(SZ(v[0])!=1 or SZ(s)!=lmx+1){ cout<<-1<<endl; return 0; } else{ int curr = 1; for(int i=1;i<=lmx;i++){ if(SZ(v[i])<=0){ cout<<-1<<endl; return 0; } int idx = 0,cnt = 0; SET(vs,0); for(int j=0;j<SZ(v[i]);j++){ if(d[v[i-1][idx]] >= k){ cout<<-1<<endl; return 0; } if(!vs[idx]){ cnt++; vs[idx] = 1; } e.PB(MP(v[i-1][idx],v[i][j])); //trace(v[i-1][idx],v[i][j]); d[v[i-1][idx]]++; d[v[i][j]]++; idx++; idx %= curr; } curr = SZ(v[i]); } cout<<SZ(e)<<endl; for(int i=0;i<SZ(e);i++) printf("%d %d\n",e[i].F,e[i].S); } return 0; }
int main(){ int n,m,k; si(n);si(m);si(k); for(int i=0;i<m;i++){ int a,b,c; si(a);si(b);si(c); g[a].PB(MP(b,c)); g[b].PB(MP(a,c)); } for(int i=0;i<k;i++){ int a,c; si(a);si(c); e.PB(MP(a,c)); } for(int i=1;i<=n;i++) d[i] = INF; d[1] = 0; s.insert(MP(d[1],1)); while(!s.empty()){ int u = s.begin()->S; s.erase(s.begin()); vs[u] = 1; for(int i=0;i<SZ(g[u]);i++){ int w = g[u][i].F; LL edge = g[u][i].S; if(vs[w]) continue; if(d[u] + edge < d[w]){ if(s.find(MP(d[w],w))!=s.end()) s.erase(s.find(MP(d[w],w))); d[w] = d[u] + edge; s.insert(MP(d[w],w)); } } } int ans = 0; for(int i=0;i<SZ(e);i++){ if(d[e[i].F]<=e[i].S) ans++; } dout(ans); return 0; }
int main(){ hexa=0; scanf("%d", &n); for(int i=0; i<n; i++){ scanf("%d%d", &sampah.x, &sampah.y); awal.push_back(sampah); } sort(ALL(awal)); for(int i1=0; i1<n; i1++) for(int i2=i1+1; i2<n; i2++) for(int i3=i2+1; i3<n; i3++) for(int i4=i3+1; i4<n; i4++) for(int i5=i4+1; i5<n; i5++) for(int i6=i5+1; i6<n; i6++){ pilihan.clear(); pilihan.push_back(awal[i1]); pilihan.push_back(awal[i2]); pilihan.push_back(awal[i3]); pilihan.push_back(awal[i4]); pilihan.push_back(awal[i5]); pilihan.push_back(awal[i6]); sort(ALL(pilihan)); /*for(int i=0; i<pilihan.size(); i++){ printf("** %d %d\n", pilihan[i].x, pilihan[i].y); }*/ hasil=ConvexHull(pilihan); sort(hasil.begin(), hasil.end()); /*for(int i=0; i<hasil.size(); i++){ printf("-- %d %d\n", hasil[i].x, hasil[i].y); } puts("\n");*/ if(pilihan==hasil) hexa++; } printf("%d\n", hexa); return 0; }
REP(i,n) { //cout<<ans[i]<< ' '<<i<<endl; if(ans[i] != m) vec.PB(MP(ans[i], i)); }
scanf("%d%d%d", &n, &m, &H); REP(i,m) { scanf("%d%d%d",&l[i],&r[i],&x[i]); l[i]--; r[i]--; } //l[m] = 0; //r[m] = n-1; //x[m] = INF; REP(i,n) { id[i] = i; tmp[i] = 0; ans[i] = -1; } solve(0, n-1, 0, m); VII vec; REP(i,n) { //cout<<ans[i]<< ' '<<i<<endl; if(ans[i] != m) vec.PB(MP(ans[i], i)); } sort(ALL(vec)); assert(vec.size() > 0); printf("%d\n", vec.size()); REP(i,vec.size()) { if(i) printf(" "); printf("%d", vec[i].Y+1); } puts(""); } return 0; }
int main() { ///FIN("data.in"); ///FOUT("data.out"); read( T ); while ( T-- ) { read( N ); read( M ); for ( int i = 1; i <= N; ++i ) scanf("%s\n", A[i] + 1); VII laser; for ( int i = 1; i <= N; ++i ) for ( int j = 1; j <= M; ++j ) if ( A[i][j] == 'L' ) laser.pb( pp( i, j ) ); const int nrLaser = laser.size(); int solution = 0; for ( int i = 0; i < ( 1 << nrLaser ); ++i ) { ms( rows, 0 ); ms( column, 0 ); ms( indice, 0 ); for ( int j = 0; j < nrLaser; ++j ) { if ( bit( i, j ) ) { column[ laser[j].se ] = max( column[ laser[j].se ], laser[j].fi ); } else { rows[ laser[j].fi ]++; indice[ laser[j].fi ] = j; } } int valid = 1; for ( int j = 1; j <= N && valid; ++j ) { if ( rows[j] == 0 ) { for ( int k = 1; k <= M; ++k ) { if ( A[j][k] == 'E' && column[k] < j ) valid = 0; } } if ( rows[j] == 1 ) { int stanga = 0; int dreapta = 0; int ind = indice[j]; int x = laser[ind].fi; int y = laser[ind].se; for ( int k = y - 1; k >= 1; k-- ) if ( A[j][k] == 'E' && column[k] < j ) stanga++; for ( int k = y + 1; k <= M; ++k ) if ( A[j][k] == 'E' && column[k] < j ) dreapta++; if ( stanga && dreapta ) valid = 0; } } if ( valid ) { solution = 1; break; } } if ( solution ) puts("Possible"); else puts("Impossible"); } return 0; }