【code[vs]】1001 舒适的路线 并查集+枚举

和今天考试题差不多

就在sillyf大佬指导下水了一发


题目 用户 运行状态 得分 耗时 内存 语言 代码 提交时间
1001 舒适的路线 FMM 测试通过 Accepted 100 965ms 364 kB C++ 1462B 2017/11/05 15:12:00


#include 
#include 
#define C (c=nc())
using namespace std;

struct wjnsb
{
	int s,t,x;
}e[5005];

int s,t,m,n,ans_1,ans_2,Max;
double ans=2139062143.0;
int f[505];

bool mmp(wjnsb i,wjnsb j){return i.x'9') c=='-'?f=-1,C:C;
	while (c>='0'&&c<='9') n=(n<<3)+(n<<1)+c-48,C;
	return (void)(n*=f);
}

int fa(int x){return f[x]==x?x:f[x]=fa(f[x]);}

void ori(void)
{
	for (register int i=1;i<=n;++i) f[i]=i;
}

int sol(int x)
{
	ori();
	for (register int i=x;i<=m;++i)
	{
		if (fa(e[i].s)!=fa(e[i].t)) f[f[e[i].s]]=e[i].t,Max=i;
		if (fa(s)==fa(t)) return 0;
	}
	return -1;
}

int gcd(int a,int b){return b==0?a:gcd(b,a%b);}

int main(void)
{
	freopen ("in.txt","r",stdin);
	read(n),read(m);
	register int i;
	for (i=1;i<=m;++i) read(e[i].s),read(e[i].t),read(e[i].x);
	read(s),read(t);
	sort(e+1,e+1+m,mmp);
	for (i=1;i<=m;++i)
		if (sol(i)==0)
			if ((double)e[Max].x/(double)e[i].x


你可能感兴趣的:(code[vs],较易)