求助,两个例子都过了,我试了一些自己的数也过了,但是答案全wa了
  • 板块P2683 小岛
  • 楼主ming_02
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/15 17:57
  • 上次更新2024/3/15 20:08:34
查看原帖
求助,两个例子都过了,我试了一些自己的数也过了,但是答案全wa了
473532
ming_02楼主2024/3/15 17:57
#include<bits/stdc++.h>
using namespace std;

int n, m;
int via[2505][2505] = { 0 }; //存路径长度
int f[10005] = { 0 };	//存下一条线路
int vis[10005] = { 0 }; 	//该点是否查询过
int cnt = 0;
struct node {
    int to,next;
    int z;
}edge[1000005];

void add(int x, int y, int z) {
	edge[++cnt].to = y;
    edge[cnt].next = f[x];
	edge[cnt].z = z;
    f[x] = cnt;

}

void dj(int x) {
    queue<int> q;
    q.push(x);
    //vis[x] = 1;
    fill(vis, vis + n + 1, 0);
    while (!q.empty()) {
        int u, v;
        u = q.front();
        q.pop();
        if (vis[u]) continue;
        vis[u] = 1;
        for (int i = f[u]; i; i = edge[i].next) {
            v = edge[i].to;
            if (via[x][v] > via[x][u] + edge[i].z || via[x][v] == 0) {
				via[x][v] = via[x][u] + edge[i].z;
                
				q.push(v);
				
			}

        }
    }


}



int main() {
    cin >> n >> m;
    int i, j;
    
    for (i = 1; i <= m; i++) {
        int op;
        int x, y, z;
        cin >> op;
        if (op) {
            cin >> x>> y>> z;
            add(x, y, z);
            add(y, x, z);
        }
        else {
            cin >> x >> y;
            dj(x);
            if (via[x][y] == 0) {
                cout << -1 << endl;
            }
            else 
                cout << via[x][y] << endl;
        }
    }

    
    
    return 0;
}
2024/3/15 17:57
加载中...