QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#322337#6766. Direction SettingYarema#AC ✓2ms3996kbC++142.7kb2024-02-06 21:14:362024-02-06 21:14:37

Judging History

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

  • [2024-02-06 21:14:37]
  • 评测
  • 测评结果:AC
  • 用时:2ms
  • 内存:3996kb
  • [2024-02-06 21:14:36]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--)
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second

typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef double db;

const int LINF = 1e9 + 7;

struct Graph
{
	struct Edge
	{
		int from, to;
		LL cap, flow;
	};
	
	int n;
	vector<Edge> edges;
	vector<VI> g;
	VI d, p;
	
	void init(int _n)
	{
		n = _n;
		edges.clear();
		g.clear();
		g.resize(n);
		d.resize(n);
		p.resize(n);
	}
	void addEdge(int from, int to, LL cap)
	{
		assert(0 <= from && from < n);
		assert(0 <= to && to < n);
		assert(0 <= cap);
		g[from].PB(SZ(edges));
		edges.PB({from, to, cap, 0});
		g[to].PB(SZ(edges));
		edges.PB({to, from, 0, 0});		
	}
	int bfs(int s, int t)
	{
		fill(ALL(d), -1);
		d[s] = 0;
		queue<int> q;
		q.push(s);
		while (!q.empty())
		{
			int v = q.front();
			q.pop();
			for (int e : g[v])
			{
				int to = edges[e].to;
				if (edges[e].flow < edges[e].cap && d[to] == -1)
				{
					d[to] = d[v] + 1;
					q.push(to);
				}
			}
		}
		return d[t];
	}
	LL dfs(int v, int t, LL flow)
	{
		if (v == t || flow == 0)
			return flow;
		for (; p[v] < SZ(g[v]); p[v]++)
		{
			int e = g[v][p[v]], to = edges[e].to;
			LL c = edges[e].cap, f = edges[e].flow;
			if (f < c && (to == t || d[to] == d[v] + 1))
			{
				LL push = dfs(to, t, min(flow, c - f));
				if (push > 0)
				{
					edges[e].flow += push;
					edges[e ^ 1].flow -= push;
					return push;
				}
			}
		}
		return 0;
	}
	LL flow(int s, int t)
	{
		assert(0 <= s && s < n);
		assert(0 <= t && t < n);
		assert(s != t);
		LL flow = 0;
		while (bfs(s, t) != -1)
		{
			fill(ALL(p), 0);
			while (true)
			{
				LL f = dfs(s, t, LINF);
				if (f == 0)
					break;
				flow += f;
			}
		}
		return flow;
	}
};

void solve()
{
	int n, m;
	cin >> n >> m;
	VI a(n);
	FOR (i, 0, n)
		cin >> a[i];
	int s = n + m;
	int t = s + 1;
	Graph g;
	g.init(n + m + 2);
	vector<PII> e;
	FOR (i, 0, m)
	{
		int u, v;
		cin >> u >> v;
		u--, v--;
		e.PB({u, v});
		g.addEdge(i, m + u, 1);
		g.addEdge(i, m + v, 1);
		g.addEdge(s, i, 1);
	}	
	FOR (i, 0, n)
		g.addEdge(m + i, t, a[i]);
	cout << m - g.flow(s, t) << '\n';
	FOR (i, 0, m)
	{
		assert(SZ(g.g[i]) == 3);
		if (g.edges[g.g[i][0]].flow == 1)
			cout << 1;
		else
			cout << 0;
	}
	cout << '\n';
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int t;
	cin >> t;
	while (t--)
	{
		solve();
	}
	
	return 0;
}



这程序好像有点Bug,我给组数据试试?

详细

Test #1:

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

input:

2
4 5
0 1 1 5
1 2
1 3
2 3
3 2
4 4
3 2
0 0 2
1 3
3 2

output:

2
00001
0
01

result:

ok 2 cases

Test #2:

score: 0
Accepted
time: 1ms
memory: 3820kb

input:

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

output:

0
11111111111111
1
110111011011111110111
0
1111101111111011
2
101100111010011011101101
2
11011011101
2
000111101011111110010111
3
1101110111010111101010
0
11
0
1111111111111111111
0
0111011111110111
2
0001111001001
3
000100001
0
1111111
0
111111111111111
0
1111111111111111111
2
11110111110001110100
...

result:

ok 120 cases

Test #3:

score: 0
Accepted
time: 1ms
memory: 3828kb

input:

120
5 9
1 2 2 3 1
2 2
2 4
1 5
4 3
3 4
3 3
1 5
5 4
4 3
5 4
1 0 1 1 1
2 3
5 3
1 4
4 3
15 17
0 1 1 3 1 2 1 1 1 1 1 2 0 1 1
14 6
13 12
11 4
9 8
9 4
10 5
10 2
4 4
7 4
11 10
15 6
7 1
5 3
13 14
15 12
2 14
11 6
13 17
2 2 1 1 2 1 0 0 1 4 1 1 1
5 11
6 2
2 1
5 2
1 12
7 10
10 2
1 3
3 11
7 1
9 7
11 10
11 2
4 3
7...

output:

0
111111001
0
0111
0
00001011011100010
0
11110011101101001
0
1111111
5
0000011000001
4
1100000
2
101101111111011111101
0
11110
0
1111
0
11100
0
0101
5
01110100100001000
4
111000101
4
01100100
4
10100000111010010
0
110000001010100
0
000000111100001
0
0001001111010100000
4
00100000100
2
11001001101111...

result:

ok 120 cases

Test #4:

score: 0
Accepted
time: 1ms
memory: 3620kb

input:

120
12 11
7 0 0 1 0 0 1 1 0 0 1 0
12 1
1 9
1 2
1 8
3 1
6 1
10 1
1 7
5 1
11 1
4 1
11 10
1 0 0 0 1 0 7 0 0 0 1
7 11
6 7
7 5
8 7
10 7
9 7
7 4
7 1
7 2
3 7
24 23
1 1 1 1 0 5 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1
20 6
12 6
6 9
1 6
6 15
14 6
6 2
6 18
23 6
10 6
3 6
6 16
6 7
17 6
6 13
19 6
6 22
5 6
4 6
6 11
6 ...

output:

0
01100000011
0
0000001010
0
11010101011101010011001
0
1010
0
0001101111101
0
1000110001101101011
0
10100101
0
00011011110
0
101001111011011001110110
0
1001111110010001
0
00100
0
0010101001
0
00101101011111101
0
100001110100100000
0
10011100001110011000
0
010010000101000111001
0
010
0
001100110
0
10...

result:

ok 120 cases

Test #5:

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

input:

10
300 300
0 0 0 1 6 3 0 36 0 0 0 0 8 53 23 2 8 7 8 4 1 0 3 5 0 4 0 0 2 5 5 5 7 0 0 4 3 0 0 21 2 7 6 2 0 0 0 4 0 67 3 4 9 3 1 1 0 6 2 2 0 0 0 0 0 41 5 0 0 15 2 5 0 6 5 4 0 7 4 4 6 8 0 7 2 6 0 4 4 0 8 22 1 2 6 3 0 3 6 0 0 3 0 0 6 3 0 63 3 7 7 4 0 0 0 26 0 0 1 3 6 1 1 0 0 22 0 2 0 0 1 7 4 1 0 1 0 4 0 ...

output:

31
001010011101011111110101101110110110110111011111111011011111111110001111101010111100110111100100100100101101111010101011011010111110001010100111111111101010111101101111111011100001001110011010101110110110001001011111101100110110101001011100111101011111101010110001011110100111110010111000001111100...

result:

ok 10 cases

Test #6:

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

input:

10
30 300
17 12 25 27 17 21 21 24 10 18 23 19 25 26 14 23 9 27 22 19 25 15 13 22 25 12 20 10 27 22
29 11
25 9
23 10
9 25
25 12
20 1
18 9
2 1
30 14
2 10
6 18
3 27
10 17
14 4
21 2
2 15
28 4
7 8
19 13
14 13
8 7
10 18
4 18
4 19
5 16
23 14
21 24
24 12
15 24
23 29
11 25
10 4
23 9
27 13
18 26
12 24
23 3
27...

output:

0
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110111111...

result:

ok 10 cases

Test #7:

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

input:

10
290 299
0 3 2 1 2 0 0 0 0 1 0 3 2 1 3 0 0 3 1 0 3 1 0 1 0 0 0 1 0 3 0 1 0 2 1 7 0 1 0 3 0 2 1 2 1 2 0 1 0 0 2 2 1 0 0 0 0 1 2 0 2 1 0 1 2 1 1 0 1 0 0 0 1 1 1 1 1 2 2 1 3 0 0 1 2 0 1 0 1 2 1 1 0 0 2 1 2 1 1 0 1 0 2 0 0 1 1 0 0 1 0 4 1 2 2 1 1 1 1 2 2 3 1 1 1 0 1 2 1 1 2 0 1 1 1 1 0 0 2 1 1 0 0 1 1...

output:

0
1111100000010110001101010001000010011010011010010100011001001000000010011100100011101100001001101110000111111110010001110000011000000111011001011110101010101110110100001110001000111100000010111010011001100101011100000110001100011001001101000001111100011000001010001001100100011101001000000111010101...

result:

ok 10 cases

Test #8:

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

input:

10
300 299
1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 0 0 1 142 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 0 0 1 0 0 1 0 1 1 0 1 1 1 1 0...

output:

0
0111101010001110110101100110100101010010001000100000011000100101111101111101010111000110110010110011010000011011011101000000111011111001010111001011010110010000110010110000010111011100111100100011110110010010101111110011110011001001101011010100101001110111101100000101101111110010001110011010111011...

result:

ok 10 cases