请问为什么队列定义在拓扑函数里面是正确的,但定义在外面却不对
查看原帖
请问为什么队列定义在拓扑函数里面是正确的,但定义在外面却不对
551706
Ye_zhui_Yi楼主2021/12/11 17:12
#include<bits/stdc++.h>
#define re register
#define mod 998244353
#define inf 0x7f7f7f7f
#define MAXN 1000100
#define N 250000
#define M 10000100
#define Q 10000010
#define int long long
using namespace std;
template <typename T> inline void read(T &x)
{
	x = 0 ; int w = 1 ; char ch = getchar();
	while(!isdigit(ch)) {if(ch == '-') w = -1 ; ch = getchar();}
	while(isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48) , ch = getchar();
	x *= w;
}
template <typename T> inline void write(T x)
{
	if(x < 0)
		putchar('-') , x = -x ;
	if(x == 0)
	{
		putchar('0');
		return ;
	}
	if(x > 9)
		write(x / 10);
	putchar(x % 10 + '0');
	return ;
}
struct node{
    int u,v,w,nxt;
}e[MAXN];
int h[MAXN],t;
inline void add(int u,int v,int w)
{
    e[++t].v=v;
    e[t].w=w;
    e[t].nxt=h[u];
    h[u]=t;
}
int in[MAXN],cnt,cntt,n,m,dis[MAXN];
double f[MAXN];
inline void tp()
{
    queue<int> q;
    for(int i=1;i<=n;i++)
        if(!in[i])
            q.push(i);
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        for(int i=h[u];i;i=e[i].nxt)
        {
            int v=e[i].v,w=e[i].w;
            f[v]+=(f[u]+w)/dis[v];
            in[v]--;
            if(!in[v])
                q.push(v);
        }
    }
}
int a,b,c;
signed main()
{
	read(n),read(m);
    for(int i=1;i<=m;i++)
    {
        read(a),read(b),read(c);
        add(b,a,c);
        in[a]++,dis[a]++;
    }
    tp();
    printf("%0.2lf\n",f[1]);
    return 0;
}
2021/12/11 17:12
加载中...