Instrction Arrangement (HDU 4109)

tema Enlace

título Descripción

Ali ha tomado la Organización Informática y Arquitectura supuesto este término. Aprendió que puede haber dependencia entre instrucciones, como la guerra (escribir después de leer), WAW, RAW.
Si la distancia entre dos instrucciones es menor que la distancia de seguridad, que se traducirá en peligro, lo que puede causar un resultado erróneo. Así que tenemos que diseñar circuito especial para eliminar el riesgo. Sin embargo, la forma más sencilla de resolver este problema es añadir burbujas de operación (inútil), que significa desperdicio de tiempo para asegurar que la distancia entre dos instrucciones no es menor que la distancia de seguridad.
La definición de la distancia entre dos instrucciones es la diferencia entre sus tiempos iniciales.
Ahora tenemos muchas instrucciones, y sabemos que las relaciones de dependencia y de seguridad Distancias entre instrucciones. También tenemos una muy fuerte CPU con infinidad de núcleos, por lo que puede ejecutar tantas instrucciones como desee simultaneidad, y la CPU es tan rápido que sólo cuesta 1 ns para terminar cualquier instrucción.
Su trabajo es la de reorganizar las instrucciones para que la CPU puede terminar todas las instrucciones usando un tiempo mínimo.

Formato de entrada

La entrada consiste en varios casos de prueba.
La primera línea tiene dos enteros N, M (N <= 1000, M <= 10 000), significa que hay N instrucciones y relaciones dependientes M.
Las siguientes líneas M, cada uno contiene tres enteros X, Y, Z, significa la distancia de seguridad entre X e Y es Z, e Y debe ejecutar después de X. Las instrucciones están numeradas de 0 a N - 1.

Formato de salida

Imprimir un número entero, el tiempo mínimo de la CPU necesita para funcionar.

Ejemplo de entrada

5 2
1 2 1
3 4 1

Ejemplo de salida

2

análisis

Sujeto al efecto de una instrucción dada n, m regla general, cada vez que la ejecución de instrucciones de 1 segundo, cada regla indica que la distancia de seguridad (seguridad diferencia de tiempo) entre las dos instrucciones, el tiempo mínimo requerido para completar todas las instrucciones requeridas.
Buscando camino más largo después de la plantilla problema del camino tipo crítico topológica, la figura convertida en AOE figura AOV, con t tienda array tiempo de finalización de instrucciones i. Nota Introduzca una distancia segura si el caso debe ser asignado a ≤0 1, pero no demasiada agua puede tener derecho a esta tarjeta.

fuente

#include <bits/stdc++.h>
#define MAXN 10005
using namespace std;
struct Edge{
	int v,w,next;
	Edge(){};
	Edge(int _v,int _w,int _next){
		v=_v,w=_w,next=_next;
	};
}edge[MAXN];
int EdgeCount,head[MAXN];
int n,m,in[MAXN],t[MAXN];
void addEdge(int u,int v,int w)
{
	edge[++EdgeCount]=Edge(v,w,head[u]);
	head[u]=EdgeCount;
}
void TopSort()
{
	queue<int> q;
	for(int i=0;i<n;i++)
		if(!in[i]){
			t[i]=1;
			q.push(i);
		}
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(int i=head[u];i;i=edge[i].next){
			int v=edge[i].v,w=edge[i].w;
			in[v]--;
			t[v]=max(t[v],t[u]+w);
			if(!in[v])q.push(v);
		}
	}
}
int main()
{
	while(scanf("%d%d",&n,&m)!=EOF){
		EdgeCount=0;
		for(int i=0;i<MAXN;i++)in[i]=head[i]=t[i]=0;
		for(int i=1;i<=m;i++){
			int u,v,w;
			scanf("%d%d%d",&u,&v,&w);
			if(w<=0)w=1;
			addEdge(u,v,w);
			in[v]++;
		}
		TopSort();
		int ans=-9999999;
		for(int i=0;i<n;i++)
			ans=max(ans,t[i]);
		printf("%d\n",ans);
	}
} 
Se han publicado 19 artículos originales · ganado elogios 0 · Vistas 127

Supongo que te gusta

Origin blog.csdn.net/weixin_43960284/article/details/105253488
Recomendado
Clasificación