请求加强数据
  • 板块P3637 方程组
  • 楼主AWTY
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/8/12 16:39
  • 上次更新2023/10/27 15:45:37
查看原帖
请求加强数据
235297
AWTY楼主2022/8/12 16:39

RTRT,这样都能 AA

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100100
#define in read()

inline int read(){
	int x = 0; char c = getchar();
	while(c < '0' or c > '9') c = getchar();
	while('0' <= c and c <= '9'){
		x = x * 10 + c - '0'; c = getchar();
	}
	return x;
}

int n = 0; int m = 0;
int k = 0; int q = 0;
inline int cal(int x) { return (x % k + k) % k; }

int fa[MAXN];
int siz[MAXN];
int dis[MAXN];
void init() { for(int i = 1; i < MAXN; i++) siz[i] = 1; }

int find(int x, int &d){
    d = 0;
    while(fa[x]) d += dis[x], x = fa[x];
    return x;
}

int getdis(int x,int y){
    int disx = 0, disy = 0;
    x = find(x, disx); y = find(y, disy);
    if(x != y) return -1;
    return cal(disx - disy);
}
void merge(int x, int y, int z){
    int disx = 0, disy = 0;
    x = find(x, disx); y = find(y,disy);
    if(siz[x] > siz[y]) swap(x, y), swap(disx, disy), z = -z;
    dis[x] = z + disy - disx, fa[x] = y, siz[y] += siz[x];
}

void del(int x, int y){
    if(fa[y] == x) swap(x, y);
    if(fa[x] != y) return;
    int d, f = find(x, d);
    for(int xx = fa[x]; xx; xx = fa[xx]) siz[xx] -= siz[x];
    fa[x] = 0, dis[x] = 0;
}

int main(){
	init();
	n = in, m = in, k = in, q = in;
	for(int i = 1; i <= m; i++){
		int a = in, b = in, c = in;
		merge(a, b, c);
	}
	while(q--){
		int op = in;
		if(op == 1){
			int a = in, b = in, c = in;
			merge(a, b, c);
		}
		else if(op == 2){
			int a = in, b = in;
			del(a, b);
		}
		else{
			int a = in, b = in, c = in;
			int d = getdis(b, a);
			if(d == -1) puts("-1");
			else cout << cal(c + d) << '\n';
		}
	}
	return 0;
}

这个代码的 hackhack 在这里:

input:input:

4 2 9 3

1 2 1

2 3 2

1 2 3 1

2 3 4

3 3 4 2

output:output:

-1

这段程序运行出来要么卡死要么输出 11

2022/8/12 16:39
加载中...