迷茫的梦吧 关注:2贴子:45
  • 3回复贴,共1
mle sssp
#include <iostream>
#include <queue>
using namespace std;
const unsigned short maxn=10005;
#define INT_MAX 2147483647
int map[maxn][maxn];
int n,m,s;
int f,g,w;
int result[maxn];
struct point
{
unsigned short dest[maxn];
unsigned short odlength=0;
};
point team[maxn];
struct unit
{
unsigned short num;
bool operator>(const unit& s)const{return result[num]>result[s.num];}
};
priority_queue<unit,vector<unit>,greater<unit> > q;
bool inqueue[maxn];
void relax(int s)
{
for(int i=0;i<=team[s].odlength;++i)
{
unsigned short &d=team[s].dest[i];
if(result[s]+map[s][d]<result[d])
{
result[d]=result[s]+map[s][d];
if(!inqueue[d])
{
q.push({d});
}
}
}
}
int main()
{
/* for(int i=1;i<maxn;++i)
{
result[i]=INT_MAX;
}
result[1]=5;
q.push({2});
q.push({1});
cout<<q.top().num<<" "<<result[q.top().num]<<endl;
result[2]=1;
cout<<q.top().num<<" "<<result[q.top().num]<<endl;
q.push({0});
q.pop();
cout<<q.top().num<<" "<<result[q.top().num]<<endl;*/ cin>>n>>m>>s;
for(int i=1;i<=n;++i)
{
result[i]=INT_MAX;
}
for(int i=0;i<m;++i)
{
cin>>f>>g>>w;
if(f==g)continue;
map[f][g]=(map[f][g]==0?w:min(map[f][g],w));
team[f].dest[team[f].odlength]=g;
team[f].odlength++;
}
result[s]=0;
q.push({s});
do
{
s=q.top().num;
inqueue[s]=false;
q.pop();
relax(s);
q.push({0});
q.pop();
}while(!q.empty());
for(int i=1;i<=n;++i)
{
cout<<result[i]<<" ";
}
cout<<endl;
return 0;
}


IP属地:河北1楼2018-08-28 08:35回复
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cctype>
    #include <climits>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <vector>
    #include <ctime>
    #include <string>
    #include <cstring>
    using namespace std;
    const int N=405;
    struct Edge {
    int v,w;
    };
    vector<Edge> edge[N*N];
    int n;
    int dis[N*N];
    bool vis[N*N];
    struct cmp {
    bool operator()(int a,int b) {
    return dis[a]>dis[b];
    }
    };
    int Dijkstra(int start,int end)
    {
    priority_queue<int,vector<int>,cmp> dijQue;
    memset(dis,-1,sizeof(dis));
    memset(vis,0,sizeof(vis));
    dijQue.push(start);
    dis[start]=0;
    while(!dijQue.empty()) {
    int u=dijQue.top();
    dijQue.pop();
    vis[u]=0;
    if(u==end)
    break;
    for(int i=0; i<edge[u].size(); i++) {
    int v=edge[u][i].v;
    if(dis[v]==-1 || dis[v]>dis[u]+edge[u][i].w) {
    dis[v]=dis[u]+edge[u][i].w;
    if(!vis[v]) {
    vis[v]=true;
    dijQue.push(v);
    }
    }
    }
    }
    return dis[end];
    }
    int main()
    {
    int a,b;
    scanf("%d%d",&a,&b);
    Edge Qpush;
    Qpush.v=1;
    Qpush.w=a;
    edge[0].push_back(Qpush);
    Qpush.v=2;
    Qpush.w=b;
    edge[1].push_back(Qpush);
    printf("%d",Dijkstra(0,2));
    return 0;
    }


    IP属地:河北2楼2018-08-28 15:23
    回复
      2025-07-25 18:45:54
      广告
      不感兴趣
      开通SVIP免广告
      pb_ds


      IP属地:河北3楼2018-08-29 11:21
      回复
        #include<bits/stdc++.h>
        using namespace std;
        long long n,sum=0,m=0;
        long long a[100001];
        int main()
        {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
        cin>>a[i];
        long long x=a[i];
        sum=sum+x*x;
        m=m+x;
        }
        for(int i=1;i<=n;i++)
        {
        long long b,c,d;
        b=a[i];
        c=b*b;
        d=(m-b)*(m-b);
        cout<<(sum-c)*(n-1)-d<<" ";
        }
        return 0;
        }


        IP属地:河北4楼2018-09-16 17:42
        回复