Shader is ignoring alpha

I have an object with two materials attached. One is a custom terrain shader I wrote (which works fine). The second one is a very simple surface shader that is just supposed to add the R value of the sampled texture to the output color:

Shader "Custom/ResourceMap" {
	Properties {		
		_MainTex ("Albedo (RGB)", 2D) = "white" {}		
	}
	SubShader {
		Tags { 
			"RenderType"="Transparent" 
			"Queue"="Transparent"
		}
		Blend SrcAlpha DstAlpha
		LOD 200
		
		CGPROGRAM		
		#pragma surface surf Lambert

		// Use shader model 3.0 target, to get nicer looking lighting
		#pragma target 3.0

		sampler2D _MainTex;

		struct Input {
			float2 uv_MainTex;
		};

	
		void surf (Input IN, inout SurfaceOutput o) {
			// Albedo comes from a texture tinted by color
			fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
			
			o.Albedo.r = c.r;			
			o.Alpha = c.a;
		}
		ENDCG
	} 
	FallBack "Diffuse"
}

The texture being used is almost entirely transparent, save for a few pixels which have their red channel set to a non-zero value, and full alpha. This is the code to generate that:

 public void GenerateTexture() {
        Color[] colors = new Color[WIDTH * HEIGHT];

        foreach(KeyValuePair<Vector2, int> location in locations) {
            colors[(int)location.Key.x + ((int)location.Key.y * WIDTH)] = new Color(location.Value * 0.01f, 0, 0, 1);
        }

        texture.SetPixels(colors);
        texture.Apply(false);

        // for debug
        System.IO.File.WriteAllBytes(Application.dataPath + "/../resourceMap.png", texture.EncodeToPNG());
    }

I examined the output, and it is indeed mostly transparent, save for a few black dots.

The problem I am having is that the object is blending red all over the place, not just at the locations of the pixels with a positive alpha value in the texture. What could I be doing wrong?

EDIT: realized I forgot to apply the colors to the texture. I have updated the example code. I still have the problem though; alpha is ignored.

#pragma surface surf Lambert alpha