题目链接
题目分析
第一眼看到这一题就觉得挺简单的(虽然我没有做出来 ),一个一个扫点标记,最后再统计就好了,然后正解也差不多
但是本人码力实在是不足,然后写出以下代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#define ll long long
using namespace std;
const int maxn = 80050 ;
int n,m,a,b,k,l;
int cnt,h[maxn],vis[5050],dis[5050],ans=-1;
inline int readint()
{
int x = 0 , f = 1 ; char c = getchar() ;
while ( c > '9' || c < '0' ) {
if ( c == '-' ) f = -1 ; c = getchar() ; }
while ( c >= '0' && c <= '9' ) {
x = x * 10 + c - '0' ; c = getchar() ; }
return f * x ;
}
struct node
{
int next , to , val ;
}edg[maxn] ;
void add (int u , int v ,int val)
{
++cnt ;
edg[cnt].next = h[u] ;
edg[cnt].to = v ;
edg[cnt].val = val ;
h[u] = cnt ;
}
void dfs ( int u )
{
for ( int i = h[u] ; i ; i = edg[i].next )
{
int v = edg