为什么会T啊
查看原帖
为什么会T啊
104380
garbage2楼主2020/10/13 14:06

RT,查分约束,为什么T了

#include<bits/stdc++.h>
#define INF 0x7ffffff
using namespace std;
int v[1005],nex[1005],w[1005];
int inq[1005],done[1005],dis[1005],first[1005],da[1005];
int cnt;
void add(int x,int y,int z)
{
	v[cnt]=y;
	w[cnt]=z;
	nex[cnt]=first[x];
	first[x]=cnt++;
}
int SPFA(int s,int n)
{
	int i;
	for(i=0;i<n;i++)
		dis[i]=-INF;
	memset(inq,0,sizeof(inq));
	memset(done,0,sizeof(done));
	queue<int>q;
	q.push(s);
	dis[s]=0;
	while(!q.empty()){
        int x=q.front();q.pop();
        inq[x]=0;
        for(int e=first[x];~e;e=nex[e])
        if(dis[v[e]]<dis[x]+w[e]){
            dis[v[e]]=dis[x]+w[e];
            if(!inq[v[e]])
            {
                q.push(v[e]);
                inq[v[e]]=1;
                if(++done[v[e]]>n)return 1;
            }
        }
    }
	return 0;
}
int main()
{
	int n,m,cas=0;
	char cs[4];
	while(~scanf("%d",&n)&&n){
		cas++;
		cout<<"Case "<<cas<<":\n";
		int a,b;
		memset(first,-1,sizeof(first));
		memset(nex,-1,sizeof(nex));
		cnt=0;
		int i;
		for(i=1;i<=n;i++){
			cin>>da[i];
			add(0,i,0);
		}
		while(~scanf("%s",cs)&&cs[0]!='#'){
			cin>>a>>b;
			if(cs[0]=='F'){
				if(cs[2]=='F')
					add(b,a,da[b]-da[a]);
				else
					add(b,a,-da[a]);
			}
			else {
				if(cs[2]=='F')
					add(b,a,da[b]);
				else
					add(b,a,0);
			}
		}
		if(SPFA(0,n+1))
			cout<<"impossible\n";
		else
			for(i=1;i<=n;i++)
				cout<<i<<" "<<dis[i]<<endl;
		cout<<endl;
	}
	return 0;
}
2020/10/13 14:06
加载中...