Instrction Arrangement (HDU 4109)

le lien du sujet

Titre description

Ali a pris l'Organisation et l' architecture informatique bien sûr ce terme. Il a appris qu'il peut y avoir une dépendance entre les instructions, comme la guerre (écriture après lecture), WAW, RAW.
Si la distance entre deux instructions est inférieure à la distance de sécurité, elle se traduira par hasard, ce qui peut causer un mauvais résultat. Nous avons donc besoin de concevoir un circuit spécial pour éliminer tout risque. Cependant la façon la plus simple de résoudre ce problème est d'ajouter des bulles (opération inutile), ce qui signifie perdre du temps pour faire en sorte que la distance entre deux instructions est pas inférieure à la distance de sécurité.
La définition de la distance entre deux instructions est la différence entre leur temps de début.
Maintenant , nous avons beaucoup d' instructions, et nous savons que les relations dépendantes et les distances de sécurité entre les instructions. Nous avons également une unité centrale de traitement très forte avec un nombre infini de cœurs, de sorte que vous pouvez exécuter autant d'instructions que vous voulez la simultanéité et la CPU est si rapide qu'il ne coûte que 1ns pour terminer une instruction.
Votre travail consiste à réorganiser les instructions afin que la CPU peut terminer toutes les instructions en utilisant un minimum de temps.

Format d'entrée

L'entrée se compose de plusieurs tests unitaires.
La première ligne a deux nombres entiers N, M (N <= 1000, M <= 10 000), signifie qu'il y a des instructions et des relations de dépendance Mn.
Les lignes de M suivants, chacun contient trois nombres entiers X, Y, Z, désigne la distance de sécurité entre X et Y est Z et Y doit être exécutée après X. Les instructions sont numérotées de 0 à N - 1.

Format de sortie

Imprimer un entier, le temps minimum le CPU a besoin pour fonctionner.

Exemple d'entrée

5 2
1 2 1
3 4 1

Exemple de sortie

2

analyse

Sous réserve de l'effet d'une instruction donnée n, m règle, à chaque fois d'exécution d'instruction de 1 seconde, chaque règle indique que la distance de sécurité (différence de temps de sécurité) entre les deux instructions, le temps minimum nécessaire pour remplir toutes les instructions nécessaires.
A la recherche plus long chemin après le modèle de problème de chemin critique sorte topologique, la figure transformée en AOE figure AOV, avec t i temps de fin d'instruction de stockage de tableau. Remarque Entrez une distance de sécurité si le cas doit être affecté à ≤0 1, mais pas trop d' eau peut avoir droit à cette carte.

source

#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);
	}
} 
Publié 19 articles originaux · louanges gagnées 0 · Vues 127

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43960284/article/details/105253488
conseillé
Classement