Task: | Tunnels |
Sender: | ainta1 |
Submission time: | 2017-01-22 06:02:53 +0200 |
Language: | C++ |
Status: | READY |
Result: | 100 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 16 |
#2 | ACCEPTED | 31 |
#3 | ACCEPTED | 53 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.04 s | 1 | details |
#2 | ACCEPTED | 0.04 s | 1 | details |
#3 | ACCEPTED | 0.04 s | 1 | details |
#4 | ACCEPTED | 0.05 s | 1 | details |
#5 | ACCEPTED | 0.06 s | 1 | details |
#6 | ACCEPTED | 0.04 s | 2 | details |
#7 | ACCEPTED | 0.04 s | 2 | details |
#8 | ACCEPTED | 0.04 s | 2 | details |
#9 | ACCEPTED | 0.05 s | 2 | details |
#10 | ACCEPTED | 0.04 s | 2 | details |
#11 | ACCEPTED | 0.11 s | 3 | details |
#12 | ACCEPTED | 0.07 s | 3 | details |
#13 | ACCEPTED | 0.05 s | 3 | details |
#14 | ACCEPTED | 0.06 s | 3 | details |
#15 | ACCEPTED | 0.06 s | 3 | details |
Compiler report
input/code.cpp: In function 'int main()': input/code.cpp:395:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result] scanf("%d%d",&n,&m); ^ input/code.cpp:398:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result] scanf("%d%d",&a,&b); ^
Code
/*#include<stdio.h> #include<algorithm> #include<vector> using namespace std; int n, m, RR[40][40], DD[40][40], ES[40][40]; long long res; int Num(int x, int y, int ck){ return (x-1)*m+y + ck*n*m; } struct Edge{ int b, e, c, f; }E[201000]; int EC, source, sink; vector<int>G[5000]; void Make_Edge(int b, int e, int f, int c){ G[b].push_back(EC);G[e].push_back(EC+1); E[EC].b=b,E[EC].e=e,E[EC].f=f,E[EC].c=c;EC++; E[EC].b=e,E[EC].e=b,E[EC].f=0,E[EC].c=-c;EC++; } int Path[10100], D[10100], Q[1010000], InQ[10100]; int SPFA(){ int i, head = 0, tail = 0, x; for(i=0;i<=sink;i++){ D[i] = -1e9; InQ[i] = 0; } D[0] = 0; Q[++tail] = 0; InQ[0] = 1; while(head < tail){ x = Q[++head]; InQ[x] = 0; for(i=0;i<G[x].size();i++){ Edge tp = E[G[x][i]]; if(tp.f && D[tp.e] < D[x] + tp.c){ D[tp.e] = D[x] + tp.c; Path[tp.e] = G[x][i]; if(!InQ[tp.e]){ InQ[tp.e] = 1; Q[++tail] = tp.e; } } } } return D[sink]; } void MCMF(){ int t, x, y, f; while((t = SPFA()) >= 0){ x = sink; f = 100; while(x){ y = Path[x]; f=min(f,E[y].f); x = E[y].b; } res += 1ll*f*t; x = sink; while(x){ y = Path[x]; E[y].f -= f; E[y^1].f += f; x = E[y].b; } } } int main(){ int TC,TT,i,j,K; scanf("%d",&TC); for(TT=1;TT<=TC;TT++){ printf("Case #%d: ",TT); scanf("%d%d",&n,&m); for(i=1;i<=n;i++)for(j=1;j<m;j++)scanf("%d",&RR[i][j]); for(i=1;i<n;i++)for(j=1;j<=m;j++)scanf("%d",&DD[i][j]); EC = 0; source = 0, sink = n*m*2+1; scanf("%d",&K); for(i=1;i<=K;i++){ int x,y; scanf("%d%d",&x,&y); ES[x][y]=1; } for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ } } MCMF(); if(res < -5000000){ printf("Impossible\n"); } else{ printf("%lld\n",res); } for(i=0;i<=sink;i++){ G[i].clear(); } } }*/ /* #include<stdio.h> #include<algorithm> #include<cstdlib> using namespace std; int n, K, w[1010000]; long long res, S[1010000], Sum, D1[1010000][8], D2[1010000][8], D[64][2], DP[2048][2]; bool v[64][2]; int C[2048], M[2048], m, Path[2048][2]; bool vv[2048][2]; void Dijk(){ int i, j; for(i=0;i<(1<<m);i++)v[i][0]=v[i][1]=false; while(1){ int x=-1, y=-1; long long MM = 1e17; for(i=0;i<(1<<m);i++){ for(j=0;j<2;j++){ if(MM > D[i][j] && !v[i][j]){ MM = D[i][j]; x=i,y=j; } } } if(x==-1)break; v[x][y]=true; if(y==0){ for(j=0;j<(1<<m);j++){ if(j&x || C[j]>3)continue; D[x^j][1] = min(D[x^j][1], D[x][y] + M[j]); } } else{ for(j=0;j<m;j++){ if(!((1<<j)&x))continue; D[x^(1<<j)][0] = min(D[x^(1<<j)][0], D[x][y] + w[j+1]); } } } } void Dijk2(){ int i, j; for(i=0;i<(1<<n);i++)vv[i][0]=vv[i][1]=false; while(1){ int x=-1, y=-1; long long MM = 1e17; for(i=0;i<(1<<n);i++){ for(j=0;j<2;j++){ if(MM > DP[i][j] && !vv[i][j]){ MM = DP[i][j]; x=i,y=j; } } } if(x==-1)break; vv[x][y]=true; if(y==0){ for(j=0;j<(1<<n);j++){ if(j&x || C[j]>3)continue; if(DP[x^j][1] > DP[x][y] + M[j]) Path[x^j][1] = x; DP[x^j][1] = min(DP[x^j][1], DP[x][y] + M[j]); } } else{ for(j=0;j<n;j++){ if(!((1<<j)&x))continue; if(DP[x^(1<<j)][0]> DP[x][y] + w[j+1]) Path[x^(1<<j)][0] = x; DP[x^(1<<j)][0] = min(DP[x^(1<<j)][0], DP[x][y] + w[j+1]); } } } } int TP[1010]; long long Do(int a, int b, int c){ int t = a*3-a-b-c, i; long long S = 1ll*a*w[1]+1ll*b*w[2]+1ll*c*w[3]; for(i=n;i>=6;i-=3){ if(i-3 >= 3+t){ S += w[i]; } else break; } int ed = i; for(i=ed;i>=4;i--)TP[i] = 1; TP[1]=a+1,TP[2]=b+1,TP[3]=c+1; int s = ed+a+b+c; if(s%3==2){ TP[1]--,TP[2]--; S+=w[2]; } while(1){ int x1=-1,x2=-1,x3=-1; for(i=1;i<=n;i++){ if(TP[i]){ if(x1==-1)x1=i; else if(x2==-1)x2=i; else if(x3==-1){ x3=i; break; } } } if(x1==-1)break; TP[x1]--,TP[x2]--,TP[x3]--; S += w[x3]; } return S; } int main(){ int i, j, k; srand(1879); int tc=0; while(1){ printf("%d\n",++tc); n = 9, K = 3; for(i=1;i<=n;i++){ w[i] = rand()%5+1; } sort(w+1,w+n+1); for(i=0;i<=n;i++){ for(j=0;j<8;j++){ D1[i][j]=D2[i][j]=1e18; } } for(i=0;i<(1<<n);i++){ C[i] = 0, M[i] = 0; } m = min(n,6); for(i=0;i<(1<<n);i++){ for(j=0;j<n;j++)if(i&(1<<j))C[i]++, M[i] = w[j+1]; } D1[n][0] = 0; res = 1e18; for(i=n;i>=6;i--){ for(int cc = 0; cc <= 4; cc++){ for(j=0;j<8;j++){ if(C[j] != cc)continue; if(D2[i][j]>1e17)continue; for(k=0;k<3;k++){ if((1<<k)&j){ D1[i][j^(1<<k)] = min(D1[i][j^(1<<k)], D2[i][j] + w[k+1]); } } } for(j=0;j<8;j++){ if(C[j] != cc-1)continue; for(k=0;k<8;k++){ if(k&j)continue; if(C[k]>=2)D2[i][j^k] = min(D2[i][j^k], D1[i][j] + M[k]); if(C[k]==3)continue; D2[i-1][j^k] = min(D2[i-1][j^k], D1[i][j] + w[i]); if(C[k]==2)continue; D2[i-2][j^k] = min(D2[i-2][j^k], D1[i][j] + w[i]); if(C[k]==1)continue; D2[i-3][j^k] = min(D2[i-3][j^k], D1[i][j] + w[i]); } } } } for(i=0;i<(1<<m);i++)D[i][0]=D[i][1]=1e18; for(i=3;i<=m;i++){ for(j=0;j<8;j++){ int s = 0; for(k=0;k<m;k++){ if(k>=i || (k<3 && j&(1<<k))) s += (1<<k); } D[s][0] = D1[i][j]; D[s][1] = D2[i][j]; } } Dijk(); long long res1 = D[(1<<m)-1][1]; int ret = (n-2)/2; res1 = 1e18; for(i=0;i<=ret;i++){ for(j=0;i+j<=ret;j++){ k=ret-i-j; if(i<j||j<k)continue; res1 = min(res1,Do(i,j,k)); } } for(i=0;i<(1<<n);i++)DP[i][0]=DP[i][1]=1e18; DP[0][0] = 0; Dijk2(); long long res2 = DP[(1<<n)-1][1]; if(res1 != res2){ for(i=1;i<=n;i++)printf("%d ",w[i]); printf("\n"); printf("%lld %lld\n",res1,res2); int x = (1<<n)-1, y = 1; while(x||y){ printf("%d %d\n",x,y); x = Path[x][y]; y = !y; } break; } } }*/ /* #include<stdio.h> #include<algorithm> using namespace std; int n, K; int w[1010000], TP[1010000]; long long S[1010000], res; void Do(int a, int b, int c){ int t = a*3-a-b-c, i; long long S = 1ll*a*w[1]+1ll*b*w[2]+1ll*c*w[3]; for(i=n;i>=6;i-=3){ if(i-3 >= 3+t){ S += w[i]; } else break; } int ed = i; for(i=ed;i>=4;i--)TP[i] = 1; TP[1]=a+1,TP[2]=b+1,TP[3]=c+1; int s = ed+a+b+c; if(s%3==2){ TP[1]--,TP[2]--; S+=w[2]; } while(1){ int x1=-1,x2=-1,x3=-1; for(i=1;i<=n;i++){ if(TP[i]){ if(x1==-1)x1=i; else if(x2==-1)x2=i; else if(x3==-1){ x3=i; break; } } } if(x1==-1)break; TP[x1]--,TP[x2]--,TP[x3]--; S += w[x3]; } res = min(res,S); } int main(){ int i, j, k; scanf("%d%d",&n,&K); for(i=1;i<=n;i++){ scanf("%d",&w[i]); S[i] = S[i-1] + w[i]; } if(n<=K){ printf("%d\n",w[n]); return 0; } if(K==2){ long long Sum; Sum = S[n]-S[1] + 1ll*w[1]*(n-2); res = Sum; for(i=n-1;i>=3;i-=2){ Sum -= w[i]+w[i+1]+w[1]*2; Sum += w[i+1]+w[2]+w[2]+w[1]; res = min(res,Sum); } printf("%lld\n",res); return 0; } if(n>100)return 0; int ret = (n-2)/2; res = 1e18; for(i=0;i<=ret;i++){ for(j=0;i+j<=ret;j++){ k=ret-i-j; if(i<j||j<k)continue; Do(i,j,k); } } printf("%lld\n",res); }*/ #include<stdio.h> #include<algorithm> int UF[101000], n, m, Deg[101000], C[101000], chk[101000], res, chk2[101000]; using namespace std; int Find(int a){ if(a==UF[a])return a; return UF[a] = Find(UF[a]); } int main(){ int i, a, b; scanf("%d%d",&n,&m); for(i=1;i<=n;i++)UF[i] = i; for(i=1;i<=m;i++){ scanf("%d%d",&a,&b); chk2[a]=chk2[b]=1; Deg[a]++,Deg[b]--; a = Find(a), b = Find(b); if(a!=b){ UF[a] = b; } } for(i=1;i<=n;i++){ C[Find(i)] += (Deg[i]<0?-Deg[i]:Deg[i]); chk[Find(i)] = 1; } for(i=1;i<=n;i++){ if(chk[i] && chk2[i]){ res += max(C[i],2)/2; } } printf("%d\n",res); }
Test details
Test 1
Group: 1
Verdict: ACCEPTED
input |
---|
10 20 4 5 6 4 5 1 5 9 ... |
correct output |
---|
11 |
user output |
---|
11 |
Test 2
Group: 1
Verdict: ACCEPTED
input |
---|
10 10 7 3 5 2 9 7 1 5 ... |
correct output |
---|
5 |
user output |
---|
5 |
Test 3
Group: 1
Verdict: ACCEPTED
input |
---|
10 5 5 7 3 8 5 8 3 7 ... |
correct output |
---|
4 |
user output |
---|
4 |
Test 4
Group: 1
Verdict: ACCEPTED
input |
---|
10 4 9 1 6 8 7 1 5 7 |
correct output |
---|
3 |
user output |
---|
3 |
Test 5
Group: 1
Verdict: ACCEPTED
input |
---|
10 2 10 6 2 1 |
correct output |
---|
2 |
user output |
---|
2 |
Test 6
Group: 2
Verdict: ACCEPTED
input |
---|
100 200 24 40 25 6 36 93 92 90 ... |
correct output |
---|
97 |
user output |
---|
97 |
Test 7
Group: 2
Verdict: ACCEPTED
input |
---|
100 100 98 37 91 37 60 92 46 27 ... |
correct output |
---|
60 |
user output |
---|
60 |
Test 8
Group: 2
Verdict: ACCEPTED
input |
---|
100 50 74 95 53 72 69 85 14 13 ... |
correct output |
---|
34 |
user output |
---|
34 |
Test 9
Group: 2
Verdict: ACCEPTED
input |
---|
100 40 28 76 10 81 13 52 46 83 ... |
correct output |
---|
29 |
user output |
---|
29 |
Test 10
Group: 2
Verdict: ACCEPTED
input |
---|
100 20 27 35 72 92 56 4 64 80 ... |
correct output |
---|
18 |
user output |
---|
18 |
Test 11
Group: 3
Verdict: ACCEPTED
input |
---|
100000 200000 89244 59358 22943 56710 63331 89437 56581 38400 ... |
correct output |
---|
102510 |
user output |
---|
102510 |
Test 12
Group: 3
Verdict: ACCEPTED
input |
---|
100000 100000 21701 85599 61542 21474 38081 29362 46316 64038 ... |
correct output |
---|
60593 |
user output |
---|
60593 |
Test 13
Group: 3
Verdict: ACCEPTED
input |
---|
100000 50000 86469 4833 16351 35505 59315 33011 95464 16985 ... |
correct output |
---|
35933 |
user output |
---|
35933 |
Test 14
Group: 3
Verdict: ACCEPTED
input |
---|
100000 40000 5392 23534 63204 45619 74330 25925 59678 88427 ... |
correct output |
---|
30074 |
user output |
---|
30074 |
Test 15
Group: 3
Verdict: ACCEPTED
input |
---|
100000 20000 80156 16531 71753 77661 7028 33389 17168 646 ... |
correct output |
---|
16882 |
user output |
---|
16882 |