//并查集 测是否连接,更新最小代价 #include #define ll long long #define N 3050 #define INF 0x3f3f3f using namespace std; int pre[N],h[N],sum[N]; long double aw(long double x1,long double y1,long double x2,long double y2) { return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); } long double cv(long double a,long double b,long double c) { return acos((b*b+c*c-a*a)/(2*b*c)); } int oneNumInBinary(ll n) { ll cnt=0; while(n) n=n&(n-1),cnt++; return cnt; } ll qpow(ll a,ll b) { ll ans=1; while(b) { if(b&1) ans=(ans*a)%999; a=a*a%999; b>>=1; } return ans; } inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } inline string readstring() { string str; char s=getchar(); while(s==' '||s=='\n'||s=='\r'){s=getchar();} while(s!=' '&&s!='\n'&&s!='\r'){str+=s;s=getchar();} return str; } int find(int x) { int r=x; while(r!=pre[r]) r=pre[r]; return r; } void Union(int x,int y) { int fx=find(x),fy=find(y); if(fx!=fy) pre[fy]=fx; } int main() { int n,m,a,b,w; while(~scanf("%d %d",&n,&m)&&n!=0) { int ans=0; for(int i=0; i