QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#35551#1454. Um nik's Algorithmqingyu_orzTL 3ms4268kbC++2.3kb2022-06-16 20:18:272022-06-16 20:18:29

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-06-16 20:18:29]
  • 评测
  • 测评结果:TL
  • 用时:3ms
  • 内存:4268kb
  • [2022-06-16 20:18:27]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
namespace file_read{
    namespace input_file_io{
        char ib[1<<25],*ip1=ib,*ip2=ib;
        inline char gc(){
#ifdef JohnAlfnov
			return getchar();
#else
            return (ip1==ip2&&(ip2=(ip1=ib)+fread(ib,1,1<<24,stdin)),ip1==ip2?EOF:*ip1++);
#endif
        }
        inline int read(){
            int x=0;
            char c=gc();
            while(c<'0'||c>'9')c=gc();
            while(c>='0'&&c<='9'){
                x=(x<<3)+(x<<1)+(c^'0');
                c=gc();
            }
            return x;
        }
    };
	using namespace input_file_io;
};
using namespace file_read;
int n,S,T;
int hd[5000005],mw[5000005],l[5000005],pre[5000005];
int nxt[12000005],c[12000005],bb[12000005],tt[12000005],tot=1;
inline void addedge(int u,int v,int w,int bh){
	if(!hd[u])hd[u]=++tot;
	else nxt[mw[u]]=++tot;
	mw[u]=tot;
	c[tot]=w,bb[tot]=bh,tt[tot]=v;
}
int q[5000005];
bool bfs(){
	for(int i=1;i<=n;++i)l[i]=1e9+7,pre[i]=hd[i];
	l[S]=1;
	int h=0,t=-1;
	q[++t]=S;
	while(h<=t){
		int x=q[h++];
		for(int i=hd[x];i;i=nxt[i]){
			int v=tt[i];
			if(c[i]==0)continue;
			if(l[v]>l[x]+1){
				l[v]=l[x]+1;
				if(v==T)return 1;
				q[++t]=v;
			}
		}
	}
	return 0;
}
int ans=0;
int dinic(int x,int rl){
	if(x==T)return rl;
	int he=0;
	for(int i=pre[x];i;i=nxt[i]){
		pre[x]=i;
		if(c[i]==0)continue;
		int v=tt[i];
		if(l[v]!=l[x]+1)continue;
		int ll=dinic(v,min(c[i],rl));
		rl-=ll,he+=ll;
		c[i]-=ll,c[i^1]+=ll;
		if(!rl)return he;
	}
	return he;
}
int main(){
	int aa=clock();
	int n1=read(),n2=read(),m=read();
	n=1+n1+n2+1;
	S=1,T=n;
	for(int i=1;i<=n1;++i)addedge(S,1+i,1,0),addedge(1+i,S,0,0);
	for(int i=1;i<=n2;++i)addedge(1+n1+i,T,1,0),addedge(T,1+n1+i,0,0);
	for(int t=1;t<=m;++t){
		int u=read(),v=read();
		addedge(1+u,1+n1+v,1,t);
		addedge(1+n1+v,1+u,0,0);
	}
	for(int i=1;i<=19;++i){
		if(!bfs())break;
		if(1.0*(clock()-aa)/CLOCKS_PER_SEC>3.8)break;
		ans+=dinic(S,INT_MAX);
	}
	printf("%d\n",ans);
	vector<int>g;
	for(int i=2;i<=1+n1;++i)for(int j=hd[i];j;j=nxt[j]){
		if(c[j])continue;
		int dd=tt[j];
		if(dd<2+n1||dd>1+n+n1)continue;
		g.emplace_back(bb[j]);
	}
	sort(g.begin(),g.end());
	for(auto cu:g)printf("%d\n",cu);
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3816kb

input:

3 2 4
1 1
2 1
3 1
3 2

output:

2
1
4

result:

ok answer: 2, maximum: 2

Test #2:

score: 0
Accepted
time: 2ms
memory: 3692kb

input:

20 20 20
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20

output:

20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

result:

ok answer: 20, maximum: 20

Test #3:

score: 0
Accepted
time: 0ms
memory: 4268kb

input:

1000 1000 10000
988 405
844 805
40 354
416 591
520 704
697 24
315 386
122 390
991 213
506 14
309 298
26 829
329 63
787 91
971 703
805 699
624 645
121 181
841 741
473 84
258 116
490 753
725 603
265 302
869 71
611 507
59 292
11 532
117 61
192 600
650 342
204 580
687 675
670 407
637 622
569 236
728 476...

output:

1000
1
2
3
4
7
8
11
12
13
16
21
24
27
28
29
30
31
32
36
37
38
39
40
41
44
45
47
48
49
51
53
55
58
59
60
62
63
65
66
68
69
70
71
74
75
76
80
81
83
84
88
92
94
95
96
98
99
103
104
105
106
109
113
114
122
123
128
132
133
134
137
138
142
143
145
147
150
151
153
154
157
164
171
173
178
179
182
184
187
19...

result:

ok answer: 1000, maximum: 1000

Test #4:

score: 0
Accepted
time: 2ms
memory: 3792kb

input:

100 2 200
40 1
22 2
75 2
79 1
27 2
11 1
7 1
64 1
21 1
57 2
47 1
4 2
61 2
37 1
8 2
32 2
84 1
63 1
67 1
86 2
88 2
73 1
17 1
94 2
44 2
19 2
16 1
33 2
92 1
24 2
100 2
18 2
85 1
7 2
43 1
82 2
15 2
88 1
91 1
65 1
69 1
36 1
6 2
23 2
58 1
59 1
64 2
38 1
72 1
99 1
76 1
11 2
2 2
98 1
66 2
77 1
47 2
98 2
52 2
...

output:

2
96
155

result:

ok answer: 2, maximum: 2

Test #5:

score: 0
Accepted
time: 3ms
memory: 3912kb

input:

1000 1000 1000
411 789
753 186
495 203
417 324
490 424
195 480
314 23
663 218
12 747
124 390
134 38
218 536
291 840
174 908
474 767
313 167
575 9
857 427
313 27
959 935
258 70
472 957
747 228
205 939
293 303
626 802
712 283
658 346
208 383
889 204
99 640
801 966
828 742
534 11
259 734
226 129
843 35...

output:

540
1
2
4
5
6
7
10
11
12
15
16
18
21
22
23
25
29
30
31
33
38
39
42
43
44
45
46
48
49
50
52
53
54
58
59
60
61
62
65
66
67
69
73
74
75
76
77
78
80
82
84
87
88
90
91
92
93
94
96
97
99
100
103
104
105
106
108
111
112
113
114
117
121
122
123
124
125
126
128
129
130
131
132
133
135
137
139
140
143
144
146...

result:

ok answer: 540, maximum: 540

Test #6:

score: 0
Accepted
time: 0ms
memory: 3976kb

input:

1000 2000 3000
143 619
571 526
215 1074
6 1714
370 937
120 784
134 1671
722 1528
397 345
464 401
198 589
283 564
212 232
527 286
237 1649
413 1570
964 1731
194 645
639 735
182 656
641 1143
535 98
113 596
787 972
306 818
657 1202
321 1327
753 1088
122 1823
471 611
516 811
380 1548
872 973
509 1841
70...

output:

944
1
2
3
4
5
6
7
10
11
13
15
16
17
18
19
20
22
23
24
26
27
28
29
31
32
34
35
36
39
40
41
42
43
44
45
46
47
48
50
51
52
53
54
58
60
61
62
63
64
65
66
68
70
71
72
73
75
76
77
78
79
80
81
84
85
86
88
89
91
92
93
94
95
96
97
98
99
100
101
104
105
106
108
109
110
113
115
117
118
120
122
123
124
125
126
...

result:

ok answer: 944, maximum: 944

Test #7:

score: -100
Time Limit Exceeded

input:

2000000 2000000 2000000
1203137 1030076
215220 238101
293102 491863
1260446 165178
1683989 1718181
1641329 1179380
708733 403707
1918936 574923
525651 11571
1169951 422281
1086376 303530
1286459 1692862
31854 394688
916288 273853
709758 1176923
1730408 1766172
1890708 588004
344339 283448
1676753 13...

output:


result: