92分蒟蒻求助
查看原帖
92分蒟蒻求助
234224
青鸟_Blue_Bird楼主2020/10/9 22:02

RT, 第10个点死活过不去,一直TLE, 是不是check函数写假了。。。。。谢谢大佬们!!

#include <bits/stdc++.h>
using namespace std;
#define N 110
const int inf = (int)2e9; 

struct node{
    int v, w, next;
} t[(N * N) << 1];
int f[N];

int bian = 0;
inline void add(int u, int v, int w){
    t[++bian] = (node){v, w, f[u]}, f[u] = bian;
    return ; 
}

int n, k, m, s, ht; 
int C[N]; 
int a[N][N];           // 瀹楁暀鍏崇郴
int d[N][N];           // 娌℃湁闄愬埗涓嬬殑璺濈
int alr[N], cnt = 0;   // 宸茬粡瀛︿範杩囩殑瀹楁暀 
bool vis[N]; 

void floyd(){
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            for(int k = 1; k <= n; k++){
                d[i][j] = min(d[i][j], d[i][k] + d[k][j]); 
            }
        }
    }
    return ; 
}

bool check(int v){
    bool flag = 1; 
    for(int j = 1; j <= cnt; j++)
        if(alr[j] == C[v] || a[C[v]][alr[j]] == 1){    // 宸茬粡瀛︿範杩囧畻鏁? 涓嶈兘鍘? 鎴栬€?鍜屽凡缁忓杩囩殑瀹楁暀鍐茬獊
            flag = 0;
            break ;  
        }
    return flag; 
}

int ans = inf; 
void dfs(int now, int step){
    if(step + d[now][ht] >= ans) return ;
    if(now == ht){
        ans = min(ans, step);
        return ; 
    }
    for(int i = f[now]; i; i = t[i].next){ 
        int v = t[i].v;
        if(!check(v) || vis[v]) continue; 
        alr[++cnt] = C[v]; 
        vis[v] = 1; 
        dfs(v, step + t[i].w);
        cnt--; 
        vis[v] = 0; 
    }
    return ; 
}

int main(){
    cin >> n >> k >> m >> s >> ht;
    for(int i = 1; i <= n; i++)
        cin >> C[i];
    for(int i = 1; i <= k; i++){
        for(int j = 1; j <= k; j++)
            cin >> a[i][j]; 
    }
    if(C[s] == C[ht]){
    	printf("-1");
    	return 0; 
	}
    memset(d, 0x3f, sizeof(d)); 
    for(int i = 1; i <= m; i++){
        int x, y, w;
        cin >> x >> y >> w;
        add(x, y, w);
        add(y, x, w); 
        d[x][y] = d[y][x] = min(d[x][y], w); 
    }
    floyd(); 
    alr[++cnt] = C[s]; 
    vis[s] = 1; 
    dfs(s, 0);  
    if(ans == inf) ans = -1; 
    cout << ans << endl;
    return 0; 
}
2020/10/9 22:02
加载中...