Prefijo y banda lateral derecho disjuntos-set

Entrenamiento 4 - F problema

TT y FF son ... amigos. Uh ... muy, muy buenos amigos -________- b
FF es un chico malo, siempre está cortejando TT para jugar el siguiente juego con él. Este es un juego muy monótona. Para empezar, TT debe escribir una secuencia de números enteros -_- !! (aburrido).
Entonces, FF puede elegir una subsecuencia continua de ella (por ejemplo, la subsecuencia de la tercera a la quinta número entero inclusive). Después de eso, le preguntará FF TT lo que la suma de la subsecuencia que eligió es. El siguiente, TT contestará a la pregunta de FF. Entonces, FF puede hacer de nuevo este proceso. Al final, FF debe elaborar toda la secuencia de números enteros.
BoringBoringa muy, muy aburrido juego !!! TT no quiere jugar con FF en absoluto. Para castigar a FF, a menudo se dice FF las respuestas erróneas a propósito.
El chico malo no es un hombre tonto. FF detecta algunas respuestas son incompatibles. Por supuesto, estas contradicciones hacen que sea difícil calcular la secuencia.
Sin embargo, el TT es una chica agradable y encantador. Ella no tiene el corazón para ser duro en FF. Para ahorrar tiempo, se garantiza que las respuestas están bien si no hay errores lógicos de hecho.
Lo que es más, si FF encuentra una respuesta a equivocarse, que lo ignorará la hora de juzgar siguientes respuestas.
Sin embargo, habrá muchas preguntas que la mala FF no puede asegurarse si la respuesta actual es correcto o incorrecto en un momento. Por lo que decide escribir un programa para ayudarle con este asunto. El programa recibirá una serie de preguntas de los FF junto con las respuestas FF ha recibido de TT. El objetivo de este programa es encontrar cuántas respuestas son incorrectas. Sólo haciendo caso omiso de las respuestas incorrectas pueden FF trabajo a cabo toda la secuencia de números enteros. Pobres FF no tiene tiempo para hacer este trabajo. Y ahora se está pidiendo su ayuda ~ (¿Por qué pedir problemas por sí mismo ~~ Chico malo)

Entrada

Línea 1: dos enteros, N y M (1 <= N <= 200 000, 1 <= M <= 40000). Medios TT escribió N enteros y FF le hacía preguntas M.
Línea 2 ... M + 1: Línea i + 1 contiene tres entero: Ai, Bi y Si. Medios TT FF respondió que la suma de Ai Bi es Si. Está garantizado que 0 <Ai <= Bi <= N.
Se puede suponer que cualquier suma de subsecuencia está en condiciones de entero de 32 bits.

Salida

Una sola línea con un número entero indica cuántas respuestas son incorrectas.

Entrada

5 10
1 10 100
7 10 28
1 3 32
4 6 41
6 6 1

Salida

1

#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 2e6 + 5;

int fa[maxn];
int d[maxn];

int get(int x)
{
	if (x == fa[x])
		return x;
	int root = get(fa[x]);
	d[x] += d[fa[x]];
	return fa[x] = root;
}

int main()
{
	int n, m;
	while (scanf("%d%d", &n, &m) != EOF)
	{
		for (int i = 1; i <= n; i++)
		{
			fa[i] = i;
			d[i] = 0;
		}
		int ans = 0;
		for (int i = 1; i <= m; i++)
		{
			int a, b, sum;
			scanf("%d%d%d", &a, &b, &sum);
			int x = get(a - 1);
			int y = get(b);
			if (x == y)
			{
				if (d[b] - d[a - 1] != sum)
					ans++;
			}
			else
			{
				fa[y] = x;
				d[y] = d[a - 1] - d[b] + sum;
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}

Pensando:
número de prefijo y entre la suma array [i], x, y, y que suma [y] -sum [x- 1]. cobro de cheques mantenimiento y, a los dos números relación conocida en el mismo conjunto de derechos a la valor de ruta raíz es la raíz del prefijo y.
Los vectores se pueden utilizar para comprender:
Aquí Insertar imagen Descripción

Publicado 28 artículos originales · ganado elogios 0 · Vistas 320

Supongo que te gusta

Origin blog.csdn.net/xukeke12138/article/details/104824640
Recomendado
Clasificación