这错想半天没想出来。【求助】
查看原帖
这错想半天没想出来。【求助】
310344
飞水银鼠_William楼主2021/5/1 14:07

第一次:不优化直接上,76分,8、9、10TLE

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <algorithm>
#include <string>
#include <bits/stdc++.h>
using namespace std;
int N,K,M,S,T;
int C[105],B[105][105];
int mapp[105][105];
int visit[105][105];
struct pos{
	int now;
	int steps;
	friend bool operator<(const pos &a,const pos &b){
		return a.steps>b.steps;
	}
};
int main(){
	cin>>N>>K>>M>>S>>T;
	for(int i=1;i<=N;i++){
		scanf("%d",&C[i]);
	} 
	for(int i=1;i<=K;i++){
		for(int j=1;j<=K;j++){
			scanf("%d",&B[i][j]);
		}
	}
	int u,v,d;
	for(int i=1;i<=M;i++){
		cin>>u>>v>>d;
		if(mapp[u][v]==0 || mapp[u][v]>d){
			mapp[u][v]=d;
		}
		if(mapp[v][u]==0 || mapp[v][u]>d){
			mapp[v][u]=d;
		}
	}
	for(int i=1;i<=N;i++){
		for(int j=1;j<=N;j++){
			if(B[C[i]][C[j]]==1){
				mapp[j][i]=0;
			}
		}
	}
	if(C[S]==C[T]){
		cout<<"-1";
		return 0;
	}
	priority_queue<pos> q;
	pos cnt,next;
	cnt.now=S;
	cnt.steps=0;
	q.push(cnt);
	while(!q.empty()){
		cnt=q.top();
		q.pop();
		if(cnt.now==T){
			cout<<cnt.steps;
			return 0;
		}
		for(int i=1;i<=N;i++){
			if(mapp[cnt.now][i]!=0){
				next.now=i;
				next.steps=cnt.steps+mapp[cnt.now][i];
				q.push(next);
				next=cnt;
			}
		}
	}
	cout<<"-1";
}

第二次,优化,44分,3~9WA

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <algorithm>
#include <string>
#include <bits/stdc++.h>
using namespace std;
int N,K,M,S,T;
int C[105],B[105][105];
int mapp[105][105];
bool visit[105];
struct pos{
	int now;
	int steps;
	friend bool operator<(const pos &a,const pos &b){
		return a.steps>b.steps;
	}
};
int main(){
	cin>>N>>K>>M>>S>>T;
	for(int i=1;i<=N;i++){
		scanf("%d",&C[i]);
	} 
	for(int i=1;i<=K;i++){
		for(int j=1;j<=K;j++){
			scanf("%d",&B[i][j]);
		}
	}
	int u,v,d;
	for(int i=1;i<=M;i++){
		cin>>u>>v>>d;
		if(mapp[u][v]==0 || mapp[u][v]>d){
			mapp[u][v]=d;
		}
		if(mapp[v][u]==0 || mapp[v][u]>d){
			mapp[v][u]=d;
		}
	}
	for(int i=1;i<=N;i++){
		for(int j=1;j<=N;j++){
			if(B[C[i]][C[j]]==1){
				mapp[j][i]=0;
			}
		}
	}
	if(C[S]==C[T]){
		cout<<"-1";
		return 0;
	}
	priority_queue<pos> q;
	pos cnt,next;
	cnt.now=S;
	cnt.steps=0;
	q.push(cnt);
	visit[S]=1;
	while(!q.empty()){
		cnt=q.top();
		q.pop();
		if(cnt.now==T){
			cout<<cnt.steps;
			return 0;
		}
		for(int i=1;i<=N;i++){
			if(mapp[cnt.now][i]!=0 && visit[i]==0){
				next.now=i;
				next.steps=cnt.steps+mapp[cnt.now][i];
				q.push(next);
				visit[i]=1;
				next=cnt;
			}
		}
	}
	cout<<"-1";
}
2021/5/1 14:07
加载中...