萌新求助 WA on #1#4#5
查看原帖
萌新求助 WA on #1#4#5
100910
⚡小林子⚡海棠喵楼主2020/12/9 13:37

RT

调了两天仍然是 70pts 整个人都不好了

Code:

# include<cstdio>
# include<iostream>
# include<queue>
# include<vector>
# include<cstring>
# define int long long
using namespace std;
const int N = 1e5 + 5, INF = 0x3f3f3f3f;
int n, k, x, a, b, ans, dis[N], cnt[N];
bool inq[N];
struct Edge {
	int v, w;
} edge;
vector<Edge> G[N];
inline void add(int u, int v, int w) {G[u].push_back((Edge){v, w}); }
bool SPFA(int x) {
	memset(inq, 0, sizeof inq);
	memset(cnt, 0, sizeof cnt);
	dis[x] = 0;
	queue<int> q;
	q.push(x); inq[x] = 1; cnt[x]++;
	while(!q.empty()) {
		register int v = q.front(), i; q.pop();
		inq[v] = 0;
		for(i = 0; i < G[v].size(); i++) {
			register int j = G[v][i].v, w = G[v][i].w;
			if(dis[v] + w > dis[j]) {
				dis[j] = dis[v] + w;
				if(!inq[j]) {
					if(++cnt[j] >= n)
						return 0;
					q.push(j); inq[j] = 1;
				}
			}
		}
	}
	return 1;
}
signed main() {
	scanf("%lld%lld", &n, &k);
	register int i;
	for(i = 1; i <= n; i++) {
		scanf("%lld%lld%lld", &x, &a, &b);
		if(x == 1) add(a, b, 0), add(b, a, 0);
		else if(x == 2) add(a, b, 1);
		else if(x == 3) add(b, a, 0);
		else if(x == 4) add(b, a, 1);
		else if(x == 5) add(a, b, 0);
		if(!(x & 1) && a == b) {
			puts("-1");
			return 0;
		}
	}
	for(i = 1; i <= n; i++)
		add(0, i, 1);
	if(!SPFA(0)) {
		puts("-1");
		return 0;
	}
	for(i = 1; i <= n; i++)
		ans += dis[i];
	cout << ans;
	return 0;
}

record

2020/12/9 13:37
加载中...