[模板]Dijkstra

来源:互联网 发布:mac 查看运行的程序 编辑:程序博客网 时间:2024/06/08 03:29

决定开坑模板。

#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<math.h>#include<vector>#include<map>#include<queue>#include<time.h>#include<fstream>#include<string>#include<set>#include<list>#include<stdlib.h>#define fr(i,a,b) for(int i=a,_end_=b;i<=_end_;i++)#define fd(i,a,b) for(int i=a,_end_=b;i>=_end_;i--)#define frei(s) freopen(s,"r",stdin)#define freo(s) freopen(s,"w",stdout)#define ll long long#define uns unsignedusing namespace std;#define rt return#define gc getchar()#define ln putchar('\n')ll lowbit(ll x){    rt x&(-x);}int read(){    int s=0,k=1;    char c=getchar();    while((c<'0'||c>'9')&&c!='-')c=gc;    if(c=='-'){        k=-1;        c=gc;    }    while(c>=48&&c<='9'){        s=(s<<3)+(s<<1)+(c^48);        c=gc;    }    rt s*k;}ll readmod(ll p){    ll s=0;    int k=1;    char c=getchar();    while((c<'0'||c>'9')&&c!='-')c=gc;    if(c=='-'){        k=-1;        c=gc;    }    while(c>=48&&c<='9'){        s=(s<<3)+(s<<1)+(c^48);        s%=p;        c=gc;    }    rt s*k;}int exgcd(int a,int b,int &x,int &y)  {      if(b==0)      {          x=1;        y=0;          return a;      }      int d=exgcd(b,a%b,x,y);      int temp=x;      x=y;      y=temp-a/b*y;      return d;  }  double log(double x,double y){    rt log10(x)/log10(y);}ll gcd(ll x,ll y){    rt y?gcd(y,x%y):x;}ll P(ll x,ll y)//x>=y{    ll r=1;    fr(i,1,y)        r*=(x-i+1);    rt r;}ll P(ll x,ll y,ll modnum)//x>=y{    ll r=1;    fr(i,1,y)        r=r*(x-i+1)%modnum;    rt r;}ll power(ll x,ll y,ll p)//x^y%p{    x%=p;    y%=p;    ll r=1;    while(y)    {        if(y&1)r=r*x%p;        y>>=1;        x=x*x%p;    }    rt r;}int n,m,s,g[10010],p[10010],k,minn;vector<int>t[10010];vector<int>w[10010];int main(){#ifndef ONLINE_JUDGE    freopen("","r",stdin);    freopen("","w",stdout);#endif#define inf 0x7fffffff    n=read();    m=read();    s=read();    fr(i,1,m)    {        int u=read(),v=read(),ww=read();        t[u].push_back(v);        w[u].push_back(ww);    }    fr(i,1,n)        g[i]=inf;    g[s]=0;    k=s;    fr(accepted,2,n)    {        p[k]=1;        minn=inf;        fr(i,0,t[k].size()-1)            g[t[k][i]]=min(g[t[k][i]],g[k]+w[k][i]);        fr(i,1,n)            if(!p[i]&&g[i]<minn)            {                k=i;                minn=g[i];            }    }    fr(i,1,n)        printf("%d%c",g[i],i==n?'\n':' ');    rt 0;}

攒人品ing…

rp=tan90ο

原创粉丝点击